2017-06-01 44 views
0

我在反射問題上掙扎,實際上我不確定它是否是反射問題,但情況如下所示。如何通過使用相同的字符串名稱而不是變量名稱來使用變量的功能?

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

而不是使用字符串(對於temp),您將不得不創建一個包含'Sprite'屬性的'MyClass'(用於temp)。然後,您可以重寫'MyClass.ToString()'來組合該字符串,因爲它是您想要的。但是,這是一個相對繁瑣的方法;這可能是完全過度的爲您的情況。如果您提供了一些關於您希望整體實現的內容;我們可以給你一個更準確的答案,避免矯枉過正。 – Flater

+0

'temp'是字符串,沒有'sprite'屬性,所以** No **。我想你應該解釋爲什麼,以及你在做什麼。這將有助於很多人回答你的問題。 – Programmer

回答

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; 
} 

希望它能幫助。