基于字符串值创建实例
问题描述:
我希望使用字符串值创建类的实例。 根据我在这里读到的:Activator.CreateInstance Method (String, String)它应该工作!基于字符串值创建实例
public class Foo
{
public string prop01 { get; set; }
public int prop02 { get; set; }
}
//var assName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
var assName = System.Reflection.Assembly.GetExecutingAssembly().GetName().FullName;
var foo = Activator.CreateInstance(assName, "Foo");
为什么不能正常工作? 我得到以下错误:
{"Could not load type 'Foo' from assembly 'theassemblyname, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.":"Foo"}
答
取而代之的是简单类型的名字,你应该使用完全限定的类型名称,包括整个命名空间。
像这样:
var foo = Activator.CreateInstance(assName, "Bar.Baz.Foo");
由于MSDN说:
The fully qualified name of the preferred type.
答
要么使用完全合格的名称,前面已经提出:
var foo = Activator.CreateInstance(assName, "FooNamespace.Foo");
,或因名称类型:
var type = System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.First(x=>x.Name=="Foo");
var foo = Activator.CreateInstance(type);
更简单的是直接用你的Foo类:
var foo = Activator.CreateInstance(typeof(Foo));
你能接受@Patrick福满的解决方案,并给予一个给予好评矿山:) –
注意,第二个样品是危险的,如果你有多个类型的相同的名称,但在另一个名称空间内。 –
第三个示例可以简化为'new Foo()',因为您已经知道该类型。 –