是否有可能在C#中按名稱獲取對象?C#:如何通過存儲在String中的名稱獲取對象?
即得到this.obj0使用
string objectName = "obj0";
executeSomeFunctionOnObject(this.someLoadObjectByName(objectName));
是否有可能在C#中按名稱獲取對象?C#:如何通過存儲在String中的名稱獲取對象?
即得到this.obj0使用
string objectName = "obj0";
executeSomeFunctionOnObject(this.someLoadObjectByName(objectName));
不,不是這樣的。
對象沒有名稱 - 變量。一個對象可以被任意數量的變量引用:零,一個或多個。
什麼你可以做,但是,是字段(靜態或實例變量)的名稱(用Type.GetField
)獲得和(,對於一個特定的實例,如果你正在使用的實例變量)獲得這些字段的值。
根據你想要做什麼,你可能也想考慮從名字到對象的字典。
很少有人明確表示不能這樣做,所以你可以繼續前進,看看不同的方法。謝謝。 –
不,不是所有對象都有名稱屬性(對於初學者)。
但是,您可以將感興趣的對象存儲在Dictionary<string, object>
中。您也可以通過名稱獲得控件,確切的方法取決於UI庫。
無法按名稱訪問對象。儘管如此,使用反射可以實現類的所有字段和屬性(如果需要,可以按名稱)。如果你的對象存儲在現場級變量或屬性,那麼這會給你想要的東西:
Type myType = typeof(MyClass);
FieldInfo[] myFields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
PropertyInfo[] myproperties = myType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
您也可以撥打getfield命令和getProperty(單數),並通過在一個字符串使其返回與該名稱匹配的單個成員(確保檢查爲空)。
閱讀這些網頁在這種情況下,對使用的反射方法的詳細信息:
嗯,我想你在找什麼因爲是Reflection.
這裏你可以看到一個很好的例子: http://www.switchonthecode.com/tutorials/csharp-tutorial-using-reflection-to-get-object-information
正如前面所說的 - 對象沒有名字,但你可以穿越的對象,並得到他們的類型,採取相應的行動。
此博客here展示了遍歷和反射使用的一個很好的示例。
這應該是一個很好的開始。 享受!
你不能遍歷'所有對象'。 –
@Hank,爲什麼不呢?看我的版本。 –
yN2,OQ想要搜索所有'已加載'的對象(我認爲)。這更接近垃圾收集而不是Reflection。 –
你能舉一個這個名字如何映射到對象的例子嗎?你在尋找一個對象實例還是一個類型?你想要現有的實例還是創建新的實例? –