我有这段代码:
Type leftType = workItem[LeftFieldName].GetType();
然后我要声明一个该类型的变量:
leftType someVar;
这可能吗?
答案 0 :(得分:23)
您可以执行类似的操作并将其转换为已知界面。
var someVar = Convert.ChangeType(someOriginalValue, workItem[LeftFieldName].GetType());
var someVar = Activator.CreateInstance(workItem[LeftFieldName].GetType());
如果将var
替换为dynamic
(并且您使用的是.Net 4),则可以在someVar对象上调用期望的方法。如果它们不存在,你只会得到一个MissingMethodException。
答案 1 :(得分:10)
这是不可能的。
变量类型是编译时的概念;声明一个类型的变量是没有意义的,这个变量在运行时之前是未知的 你将无法对变量做任何事情,因为你不知道它是什么类型。
您可能正在寻找dynamic
关键字。
答案 2 :(得分:3)
你做不到。
您可以使用dynamic类型用于.Net 4,但对于早期的.Net版本,唯一适合的类型是object
,您需要稍后通过再次测试来手动投射{ {1}}关于您分配给.GetType()
类型变量的内容。
答案 3 :(得分:3)
不,那是不可能的。必须在编译时知道变量的类型。
您可以声明类型object
的变量,它将能够存储任何数据类型。
答案 4 :(得分:3)
对象x = Activator.CreateInstance(Type)将允许您创建对象。在这之后你是否可以做很多事情,我不确定。
答案 5 :(得分:2)
GetType
在运行时进行评估,非dynamic
声明在编译时(它确实比那更具体,是),所以没有。即使var
也要求您为其指定一个明确类型的值。