我知道我可以使用类型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