我正在尝试做一个简单的解析器,它接收一个数组并返回一个具有填充成员的类。
我有以下实现以下接口的类。
public class ReturnedObject : IReturnedObject
{
public string Source { get; set; }
public string Destination { get; set; }
}
public interface IReturnedObject
{
string Source { get; set; }
string Destination { get; set; }
}
例如,如果我收到以下行:
命令-源值1-目标值2
我希望能够关联源值和目标值。
主要方法如下:
private static IReturnedObject Parse<T>(string[] userArgs, ICommandesUtils commandUtils) where T : IReturnedObject, new()
{
//userArgs contains the folling array
//command
//-source
//value1
//-destination
//value2
//some work...
IReturnedObject returnedObject = new T();
returnedObject.Source = userArgs[2];
returnedObject.Destination = userArgs[4];
}
我正在寻找的是一种替换以下两行的方法:
returnedObject.Source = userArgs[2];
returnedObject.Destination = userArgs[4];
我想做类似的事情:
对于该类的每个成员,返回Object
查找成员的名称(例如,“目标”)
在userArgs中找到要关联的良好值(在此示例中,“-destination”之后的值)
关联值。
那可能吗 ?
谢谢你:)
最佳答案
您可以为此使用Reflection。
首先,您应该以更好的方式存储参数。使用Dictionary。
就像是:
Dictionary<string, string> args; // Key = Property Name -- Value = Property Value
然后,按照您的逻辑,请执行以下操作:
PropertyInfo[] props = T.GetType().GetProperties();
foreach(var prop in props)
{
string propName = prop.GetMethod.Name;
if (args.ContainsKey(propName))
{
prop.SetValue(returnedObject, args[propName]);
}
}
可以编辑值和逻辑以支持任何值类型。
关于c# - C#中的解析器。如何从字符串填充类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47313143/