2017-06-29 73 views
0

我有一个'basetype'对象,我希望将其转换为特定类型。我想使这个泛型,所以我希望获得对象的名称,并将其转换为具有相同名称的类。事情是这样:基于字符串将对象投射到某种类型

string name = baseObj.name; 

var baseObj = baseObj as getClassFor(name); 

我已经找到了激活,但我Activator.CreateInstance(),我不认为,正是我需要的。

我的问题是,我如何将对象转换为基于字符串的某种类型?

+2

为什么你需要那个? –

+0

@TimSchmelter因为我们有一堆对象来检查类型并将其转换为该类型,所以如果不使用elses或switch语句,我认为可以用几行来完成它。 – thatOneGuy

+0

尝试使用泛型而不是字符串名称 –

回答

1

由于铸造主要是编译时的事情,所以不能根据字符串强制转换为特定的类型,因此您必须使用dynamic关键字。

var t= Type.GetType(baseObj.name); //This should contain the correct namespace too. ex. "MyNamespace.SpecificClass" 
dynamic specificObj = Convert.ChangeType(baseObj, t); 
specificObj.SpecificMethod();