C# 当我有一个类,但子类名称是字符串时,如何从子类获取属性
我有一个从错误消息中获取子类名称的方法,如下所示C# 当我有一个类,但子类名称是字符串时,如何从子类获取属性,c#,class,inheritance,subclass,C#,Class,Inheritance,Subclass,我有一个从错误消息中获取子类名称的方法,如下所示 string jobDesc = getDtlName(serviceResponse.ErrorMessages[0].Error); 我有这个类,并且想访问子类属性,但是当我只有子类名称作为字符串时,我如何才能做到这一点 Java有这样一种方法 Class myClass = Class.forName(jobDesc); 如何在C#中执行相同的操作?您可以使用AppDomain.CurrentDomain.GetAssemblies()
string jobDesc = getDtlName(serviceResponse.ErrorMessages[0].Error);
我有这个类,并且想访问子类属性,但是当我只有子类名称作为字符串时,我如何才能做到这一点
Java有这样一种方法
Class myClass = Class.forName(jobDesc);
如何在C#中执行相同的操作?您可以使用
AppDomain.CurrentDomain.GetAssemblies()
,然后使用
获取这些程序集的所有类型。选择many(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)
你需要这样做
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);
您可能需要做一些小的更改,因为我还没有测试这个解决方案,我使用下面代码中的属性获得了一个工作的解决方案
PropertyInfo[] properties = typeof(UIStaticFieldErrors).GetProperties();
foreach (PropertyInfo property in properties)
{
if (property.ToString() == "Boolean " + jobDesc)
{
property.SetValue(errorSF, true);
}
}
我在properties中获取UIStaticFieldErrors的属性,然后迭代,直到获得jobDesc的匹配项,然后将该字段更新为true。变量errorSF是UIStaticFieldErrors的一个实例。谢谢您的回复,但我收到一个错误“System.Array不包含SelectMany”@user616076的定义您必须包含命名空间
System.Linq
Ok,当我运行它时,我得到这个错误“无法加载一个或多个请求的类型”。检索LoaderExceptions属性以获取更多信息。“我还缺少其他内容吗?@user616076 LoaderExceptions说明了什么?@user616076我为您添加了另一个选项,可能效果更好。