簡體   English   中英

當我有類但子類名稱為字符串時,如何從子類獲取屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM