首页 > 解决方案 > C# - 如何在不显式调用属性名称的情况下将属性值分配给对象

问题描述

我有一个应用程序,其中我有一个具有 100 个属性值的类

例如。

Class RequestData{
 String PropertName1 {get;set;}
 String PropertName2 {get;set;}
 String PropertName3 {get;set;}
 .
 .
 .
 String PropertName100 {get;set;}
}

我有一个 List>,它包含所有的属性名和属性值。所以,理想情况下,这有

PropertName1 = "Timothy"
PropertName2 = "rajan"
.
.
.
PropertName100 = "alex"

我需要创建一个 RequestData 实例并将所有属性值分配给每个属性名称

在这种情况下,我需要这样做,这将导致 100 行

 RequestData requestData = new RequestData ();
 requestData.PropertName1 = "Timothy" ;
 requestData.PropertName2 = "Rajan" ;
 requestData.PropertName3 = "Alex" ;

有没有更好的方法来做到这一点?我可以循环进入列表,但不知道如何巧妙地做到这一点

 RequestData requestData = new RequestData ();
 requestData.[key]= value ;

我希望我说清楚了。任何帮助都会很棒。

标签: c#.netdictionary

解决方案


将另一个类似的答案扔到环中,这个使用字符串列表并将它们拆分在=符号上,然后使用反射尝试获取属性名称,如果不为空,则设置我们对象的属性值:

private static void Main()
{
    var propNamesAndValues = new List<string>
    {
        "PropertName1 = Timothy",
        "PropertName2 = Rajan",
        "PropertName100 = Alex",
    };

    var requestData = new RequestData();

    foreach (var propNameValue in propNamesAndValues)
    {
        var parts = propNameValue.Split('=');
        if (parts.Length < 2) continue;

        var propName = parts[0].Trim();
        var propValue = parts[1].Trim();

        typeof(RequestData).GetProperty(propName)?.SetValue(requestData, propValue);
    }

    Console.WriteLine("{0} {1} {2}", requestData.PropertName1,
        requestData.PropertName2, requestData.PropertName100);

    GetKeyFromUser("\nDone! Press any key to exit...");
}

输出

在此处输入图像描述


推荐阅读