不输入完整的变量名称,但部分名称由另一个字符串值表示

可以说 iffields[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_one或one_one_two)


for (int z = 0; z < Split_CsvData.Length; z++)

{      

    Savestate.fields[z].ToString().Name = Split_CsvData[z].ToString();

}

不是在寻找直接的答案,而是一些提示会做!感谢您的帮助!


慕虎7371278
浏览 91回答 1
1回答

30秒到达战场

不,C# 是一种静态语言,没有这种类型的“宏”替代成员名称。您可以使用反射来获取属性,将PropertyInfo对象保存在字典中,然后再次使用反射来动态设置属性,但这听起来像一种丑陋(且难以调试)的方式来节省一些稍微重复的代码。或者,如果您可以控制Savestate该类,请将其更改为数据结构而不是具有命名属性。
打开App,查看更多内容
随时随地看视频慕课网APP