没有键入完整的变量名,但是部分名称由另一个字符串值表示

时间:2018-12-13 15:41:58

标签: c#

让我们说说fields[0].ToString()是否具有字符串值"abc"。是否可以通过将Classname.abc替换为"abc"来声明fields[z].ToString()。 看起来像Classname.fields[z].ToString();

所以起初是按照下面的方法来做的,我认为这是一种低效的方法(我要输入200行代码)。 Split_CsvData[z]包含我要声明给变量的信息(例如Savestate.one_one_one

for (int z = 0; z < Split_CsvData.Length; z++)
{ 
    if(z==0)
        Savestate.one_one_one_grouping = Split_CsvData[z].ToString();
    else if (z == 1)
        Savestate.one_one_two_grouping = Split_CsvData[z].ToString();
    else if (z == 2)
        Savestate.one_one_three_grouping = Split_CsvData[z].ToString();
    else if(z == 3)
        Savestate.one_one_three_grouping = Split_CsvData[z].ToString();
    else if (z == 4)
        Savestate.one_one_four_grouping = Split_CsvData[z].ToString();  

我想知道是否可以这样做? fields[z].ToString()包含变量名称的后半部分,例如(one_one_oneone_one_two

for (int z = 0; z < Split_CsvData.Length; z++)
{      
    Savestate.fields[z].ToString().Name = Split_CsvData[z].ToString();
}

不是在寻找直接的答案,但是有些提示可以!感谢您的所有帮助!

1 个答案:

答案 0 :(得分:1)

不,C#是一种静态语言,没有这种类型的“宏”替代成员名称。

可以使用反射来获取属性,将PropertyInfo对象保存在字典中,并再次使用反射 来动态设置属性,但是听起来很丑陋(而且很难调试),可以节省一些重复的代码。

或者,如果您控制Savestate类,请将其更改为数据结构,而不要具有命名属性。