如何使用相同的字符串名称而不是变量名来使用变量的函数?

时间:2017-06-01 10:15:52

标签: c# unity3d

我在反思问题上很挣扎,实际上我不确定它是否是反射问题,但情况如下所示。

public Image IMG1;
int x = 1;
string temp;
temp = "IMG" + x.ToString(); //Now temp is a string with value "IMG1"

在Image类中,我们可以调用“精灵”。是否可以使用“temp.sprite”而不是“IMG1.sprite”?

public Sprite newSprite;
IMG1.sprite = newSprite;

更改为

temp.sprite = newSprite;

非常感谢。

1 个答案:

答案 0 :(得分:1)

我不确定你是否需要在你的情况下使用反射。 但我建议尝试使用词典。所以在开始时你需要将你的所有图片字段添加到字典中:

Dictionary<string, Image> dict = new Dictionary<string, Image>();
dict.Add(nameof(IMG1), IMG1);

然后您可以通过以下方式访问您的字段:

dict[temp].sprite = xxxx

这种方法在性能方面要好得多。 但是,如果你真的需要通过反思来做到这一点,你可以调查一下“动态”。如果您不熟悉反射,则可以简化反射的使用。

或者使用常规反射您可以尝试这样的事情:

FieldInfo fieldInfo = typeof(YourClassWithImageField).GetField(temp);
Image img = fieldInfo.GetValue(ObjectWithYourField) as Image;
if (img != null)
{
    img.sprite = xxxx;
}

希望它有所帮助。