我有一个从错误消息中获取子类名称的方法,如下所示
string jobDesc = getDtlName(serviceResponse.ErrorMessages[0].Error);
我有类并希望访问子类属性但是当我只将子类名称作为字符串时,我该怎么做呢。
Java有一个像这样工作的方法
Class myClass = Class.forName(jobDesc);
我怎样才能在C#中做同样的事情?
答案 0 :(得分:0)
您可以使用AppDomain.CurrentDomain.GetAssemblies()
, 获取所有已加载的程序集
然后使用.SelectMany(a => a.GetTypes())
来获取这些程序集的所有类型
然后选择具有.Single(t => t.Name == jobDesc)
的给定名称的一种类型。
请注意,如果不完全符合条件,则Single
会抛出异常。
如果您的多种类型具有相同的名称(在不同的名称空间中),则应使用Where
代替。
如果没有匹配的类,请使用SingleOrDefault
,如果没有匹配的元素,则返回null
。
AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
.Single(t => t.Name == jobDesc)
如果所需的类位于当前执行的程序集中,您还可以使用
System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Single(t => t.Name == jobDesc)
答案 1 :(得分:0)
你需要做这样的事情,
string jobDesc = getDtlName(serviceResponse.ErrorMessages[0].Error);
SomeClass myClass = new SomeClass();
// set some class values,
var classType = typeof(SomeClass );
PropertyInfo info = classType.GetProperty(jobDesc);
var propertyValue = info.GetValue(myClass, null);
您可能需要做一些小修改,因为我没有测试过这个解决方案,
答案 2 :(得分:0)
我设法使用带有以下代码的属性获得了一个有效的解决方案
PropertyInfo[] properties = typeof(UIStaticFieldErrors).GetProperties();
foreach (PropertyInfo property in properties)
{
if (property.ToString() == "Boolean " + jobDesc)
{
property.SetValue(errorSF, true);
}
}
我在属性中获取UIStaticFieldErrors的属性,然后迭代直到我获得jobDesc的匹配,然后我将该字段更新为true。变量errorSF是UIStaticFieldErrors的一个实例。