我正在尝试做一个简单的解析器,它接收一个数组并返回一个具有填充成员的类。

我有以下实现以下接口的类。

    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/

10-10 00:50