2011-01-26 74 views
14

一個變量我有這樣的代碼:聲明使用類型變量

Type leftType = workItem[LeftFieldName].GetType(); 

那麼我想聲明該類型的變量:

leftType someVar; 

這可能嗎?

+2

不,你不知道。仔細考慮一下,你會發現這樣一個變量是完全無用的。 – SLaks 2011-01-26 00:45:22

+0

你想完成什麼?還有另一種方法可以解決你的實際問題。 – Trinidad 2011-01-26 01:11:32

回答

20

你可以做這樣的事情,並將它們投射到一個已知的界面。

var someVar = Convert.ChangeType(someOriginalValue, workItem[LeftFieldName].GetType()); 
var someVar = Activator.CreateInstance(workItem[LeftFieldName].GetType()); 

如果您要更換vardynamic(和你使用的是.NET 4),你可以叫你預期的someVar對象的方法。如果它們不存在,你只會得到一個MissingMethodException。

1

你不能那樣做。

您可以使用dynamic類型對於.NET 4,但對於早期版本的.Net,將適合的唯一類型是object,您將需要手動通過您指定給object什麼再次測試.GetType()後投型變量。

閱讀:SO link: whats-the-difference-between-dynamicc-4-and-var

+4

不知道這是如何適用。 'var'的使用在這裏並不重要。 – Joe 2011-01-26 00:46:11

+0

您可能會注意到我將`var someVar;`更改爲`var someVar =`,然後將其指定爲隱式輸入`someVar`。這會得到專門輸入「someVar」,這是OP後的。就像不需要弄清數據庫列類型一樣。 – RichardTheKiwi 2011-01-26 00:48:49

+2

我希望你知道* var * ALWAYS將在編譯時解析爲特定類型! – 2011-01-26 00:52:40

8

這是不可能的。

變量類型是編譯時的概念;聲明類型的變量是沒有意義的,該變量直到運行時才知道。
你不能對變量做任何事情,因爲你不知道它是什麼類型。

您可能正在尋找dynamic關鍵字。

1

不,這是不可能的。編譯時必須知道變量的類型。

您可以聲明一個object類型的變量,它將能夠存儲任何數據類型。

2

GetType在運行時進行評估,非dynamic聲明處於編譯時(它確實比這更具體,是的),所以沒有。即使var也要求您爲其指定一個明確類型的值。

3

object x = Activator.CreateInstance(Type)將讓你創建對象。無論你在這點上能做得多多,我都不確定。