C#如何在键值字符串数组的对象列表对象构造函数中使用变量作为属性名

C#如何在键值字符串数组的对象列表对象构造函数中使用变量作为属性名,c#,arrays,list,object,C#,Arrays,List,Object,背景: 我已经解析了导入到对象中的键值对。我这样做是因为我希望能够按名称属性进行排序,逻辑很容易: var varDupe = variableList.GroupBy(v => v.varName).Where(vName => vName.Count() > 1).Select(vName => vName.Key); 我在这些和字典列表之间进行了辩论,但最后似乎搜索更容易了,因为我不需要导出这些键值对,只需要对它们进行错误检查。对于我的一些对象列表,我需要很多依赖

背景:

我已经解析了导入到对象中的键值对。我这样做是因为我希望能够按名称属性进行排序,逻辑很容易:

var varDupe = variableList.GroupBy(v => v.varName).Where(vName => vName.Count() > 1).Select(vName => vName.Key);
我在这些和字典列表之间进行了辩论,但最后似乎搜索更容易了,因为我不需要导出这些键值对,只需要对它们进行错误检查。对于我的一些对象列表,我需要很多依赖项,比如“如果属性Q存在,则需要属性X、Y和Z”,并同时搜索所有不同的对象。如果我能提供一份字典清单,请告诉我

我的代码现在可以很好地处理正确排序的键值对,但是作为键值对,它们本质上不需要按正确的顺序分组。我为我解析的键值字符串数组创建了一个排序函数

问题

该函数对字符串数组进行排序,但当缺少键时,问题就会出现(例如,如果varVal是可选的)。varVal和varParam都应该是双精度的,所以我需要在对象中转换它们

假设字符串数组省略了一个可选参数

varName,name1,varParam,1.01
“完整”数组如下所示:

varName,name1,varVal,3.9,varParam,1.01
public Variable(string varName, double varVal = 1, double varParam = 0)
我有以下代码用于构建我的对象:

 switch (sortedVals.Count())
                {
                    case 2:
                        materialList.Add(new Variable(sortedVals[1]));
                        break;
                    // Example of what I am trying to do to use the key-values to identify the correct property to assign a value to
                    case 4:
                        materialList.Add(new Variable(sortedVals[1]) { sortedVals[2] = Convert.ToDouble(sortedVals[3]) } );
                        break;
                    // Example of how it works correctly if they are all in order
                    case 6:
                        materialList.Add(new Variable(sortedVals[1], Convert.ToDouble(sortedVals[3]), Convert.ToDouble(sortedVals[5]) ) );
                        break;
                    ...
如果你看“案例4”,我试图使用字符串数组中的“键”来为其分配正确的“值”。变量类中的变量构造函数如下所示:

varName,name1,varVal,3.9,varParam,1.01
public Variable(string varName, double varVal = 1, double varParam = 0)

编译器没有识别出我的变量打算用作构造函数名称的字符串(例如,案例4中的varParam=Convert.ToDouble(“1.01”)

如何在构造函数中使用这样的字符串变量作为属性名

我是否应该放弃这些对象,尝试创建一个字典列表,并找到一种搜索名称重复项和其他属性的方法


谢谢大家

有不同的方法来实现这一点:

这是一个非常基本的解决方案,没有linq等。假设您的分割始终表示单个对象:

string name; 
double val = 1;
double val2 = 0;
for (int i = 0; i < sortedVals.length; i++)
{
    string key = sortedVals[i];
    i++;
    string valString = sortedVals.length > i ? sortedVals[i] : string.Empty;

    switch (key) 
    {
         case "varName":
             name = valString;
             break;
         case "varVal":
             val = valString != string.Empty ? double.Parse(valString) : val;
             break;
         case "varParam":
             val2 = valString != string.Empty ? double.Parse(valString) : val2;
             break;
    }
}
materialList.Add(new Variable(name, val, val2));
字符串名;
双val=1;
双val2=0;
对于(int i=0;ii?sortedVals[i]:string.Empty;
开关(钥匙)
{
案例“varName”:
name=valString;
打破
案例“varVal”:
val=valString!=string.Empty?double.Parse(valString):val;
打破
案例“varParam”:
val2=valString!=string.Empty?double.Parse(valString):val2;
打破
}
}
添加(新变量(名称、val、val2));
我在几个地方发布了这个问题(或变体),到目前为止,这是我见过的最优雅的解决方案,没有linq或神秘的字典分配/解析!我走错了路!不要写入“.add()”案例,而是为每个键写入值案例!谢谢