我知道我可以使用類型string
爲:如何使用類型「類型」
string someString = "This is my string";
我不知道如何使用Type
Type someType = someString.GetType();
我怎麼能創建類型基於該類型的變量。我想做類似
someType someOtherString = "here is another string";
//string
換句話說,我怎麼能創建一個基於某種類型的變量?
我知道我可以使用類型string
爲:如何使用類型「類型」
string someString = "This is my string";
我不知道如何使用Type
Type someType = someString.GetType();
我怎麼能創建類型基於該類型的變量。我想做類似
someType someOtherString = "here is another string";
//string
換句話說,我怎麼能創建一個基於某種類型的變量?
有幾種方法可以解決這個問題,但最簡單的方法是使用Activator類。
http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx
例子:
Type t = someClassInstance.GetType();
object o = Activator.CreateInstance(t);
從C#3開始,你可以這樣做:
var someOtherString = "here is another string";
這樣,你不關心什麼類型,var
是鍵入 「小丑」併爲您節省了在申報時知道該類型的必要性。
希望這就是你的意思?
嘗試
var object = Activator.CreateInstance(myType);
使用Assembly.CreateInstance()
Type type = typeof(String);
Assembly asm = Assembly.GetExecutingAssembly();
object blah = asm.CreateInstance(type.FullName);
變量類型具有在聲明時是已知的。您可以聲明object
類型的變量,然後動態創建一個只在執行時知道的類型的實例,但不能像這樣動態聲明變量。
最接近你可能會創建一個泛型類型並實例化使用反射指定的類型參數。那麼你真的會有一個正確類型的變量 - 但你不能做任何特別有用的事情。
區分變量的類型和變量值可能引用的對象的類型很重要。例如:
object foo = Activator.CreateInstance(someType);
將結束與object
類型的變量,但值的foo
將是任何類型someType
指實例的引用。
@jams:你已經有了很多關於這個問題的答案。 – 2011-05-24 06:23:27
@jams:稍後我會看看是否有時間添加答案。這不會有一段時間。其他答案看起來合理,說實話。 – 2011-05-24 06:35:08
自從C#3.0開始''var'已經出現 – 2011-05-23 21:23:04
Thanks @Bala,與'dynamic'混淆了一分鐘 – 2011-05-23 21:24:53
問題不明確,但是如果賦值爲null,例如'someOtherString'的類型應該與'someString'類型相同。 – 2011-05-23 21:26:15