我有一个Type对象。 我想从这种类型获取对象实例。 (只是使用此对象的ToString()方法)。 见:
public class P
{
public string s;
}
class Program
{
static void Main(string[] args)
{
P p = new P();
p.s = "foobar";
Type t = p.GetType();
P p2 = ((t.ToObjet()) as P).s;
Console.WriteLine(p2.s);
}
}
答案 0 :(得分:10)
Activator.CreateInstance就是你想要的。
Type givenType;
var obj = Activator.CreateInstance(givenType);
...
var obj = Activator.CreateInstance(givenType) as GivenType;
编辑:根据您的修改,您想要的Type
上的扩展方法(ToObject
)实际上就是上面的代码。它必须创建一个新的,因为您无法确定源对象是否仍然存在,即使使用该类型,您也可以遇到该类型具有多个实例的场景。
答案 1 :(得分:1)
您无法获取实例。类型在所有实例之间共享,因此您想要的是不可能的。
例如:如果你知道某个东西是一个整数,你就不知道它究竟具有哪个值。 (整数是你的类型,值是一个具体的例子。)
答案 2 :(得分:1)
没有办法做到这一点。一个原因是GetType
将为所有相同类型的实例返回相同的Type
实例。
您可以这样测试:
// this will print "True"
Console.WriteLine(object.ReferenceEquals("one".GetType(), "two".GetType()));
在这两个不同的字符串实例上调用GetType
将返回相同的Type
实例,因此显然不可能仅根据Type
实例返回其中一个实例。