[英]How do I get the properties from a subclass when I have the class but subclass name as a string
我有一個方法可以從錯誤消息中獲取子類的名稱,如下所示
string jobDesc = getDtlName(serviceResponse.ErrorMessages[0].Error);
我有Class,並且想訪問子類的屬性,但是當我僅將子類的名稱作為字符串時,該怎么做。
Java有一個像這樣的方法
Class myClass = Class.forName(jobDesc);
如何在C#中執行相同的操作?
您可以使用AppDomain.CurrentDomain.GetAssemblies()
獲取所有已加載的程序集 ,
然后使用.SelectMany(a => a.GetTypes())
獲得這些程序集的所有類型
然后使用.Single(t => t.Name == jobDesc)
選擇具有給定名稱的一種類型 。
請記住,如果不完全符合條件的1個元素,則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);
您可能需要做些小改動,因為我尚未測試過此解決方案,
我設法通過Properties和下面的代碼獲得了一個可行的解決方案
PropertyInfo[] properties = typeof(UIStaticFieldErrors).GetProperties();
foreach (PropertyInfo property in properties)
{
if (property.ToString() == "Boolean " + jobDesc)
{
property.SetValue(errorSF, true);
}
}
我在屬性中獲取UIStaticFieldErrors的屬性,然后進行迭代,直到獲得jobDesc的匹配項,然后將該字段更新為true。 變量errorSF是UIStaticFieldErrors的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.