当我有类但子类名称为字符串

时间:2016-01-06 08:54:13

标签: c# class inheritance subclass

我有一个从错误消息中获取子类名称的方法,如下所示

string jobDesc = getDtlName(serviceResponse.ErrorMessages[0].Error);

我有类并希望访问子类属性但是当我只将子类名称作为字符串时,我该怎么做呢。

Java有一个像这样工作的方法

Class myClass = Class.forName(jobDesc);

我怎样才能在C#中做同样的事情?

3 个答案:

答案 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的一个实例。