c# - 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 ;
我希望我说清楚了。任何帮助都会很棒。
解决方案
将另一个类似的答案扔到环中,这个使用字符串列表并将它们拆分在=
符号上,然后使用反射尝试获取属性名称,如果不为空,则设置我们对象的属性值:
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...");
}
输出
推荐阅读
- mongodb - 从 mongodb 3.6 升级到 4.0 后如何在没有退出代码的情况下重新启动服务器
- sql-server - 如何保持某些列原样并动态旋转 SQL Server 2012 中的最后一列
- windows - 如何更改本地 Appdata 位置
- reactjs - 不需要时的 useEffect 依赖项会生成 eslint 警告
- mysql - MySQL 5.0 表多键无主键
- html - Django 休息响应中的换行符
- react-native - 嵌套循环 React Native
- c++ - 如何在给定一行输入的整数中创建一个数组,其中第一个整数是长度?
- html - 图像未通过 css 显示
- javascript - 如何使用 axios 和 async / await 断言错误