2011-01-26 72 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)将让你创建对象。无论你在这点上能做得多多,我都不确定。