[英]using system.reflection to list a class fileds
我需要獲取一個列表來存儲所有字段-類中的值
該類只是我下面粘貼的一些公共const string
變量。
public class HTDB_Cols
{
public class TblCustomers
{
public const string CustID = "custID",
Name = "name",
CustType = "custType",
AddDate = "addDate",
Address = "address",
City = "city",
Phone = "phone",
Cell = "cell";
}
}
這是一種返回字符串列表的方法,該方法使我能夠使用代表我所有表列名稱的字符串列表,但是由於出現錯誤,某些東西無法與此代碼一起使用
“ 非靜態字段需要目標 ”。
public class GetClassFields
{
public static List<string> AsList(string TableName)
{
return typeof(HTDB_Cols).GetNestedTypes()
.First(t => String.Compare(t.Name, TableName, true) == 0)
.GetFields()
.Select(f => f.GetValue(null) as string)
.ToList();
}
}
嘗試如下使用它:
foreach (string tblCol in RobCS_212a.Utils.Reflct.GetClassFields.AsList (DBSchema.HTDB_Tables.TblCustomers))
{
Response.Write(string.Concat(tblCol, "<br />"));
}
在類型“ DBSchema.HTDB_Cols + TblTimeCPAReport”上定義的字段“ tbName”不是目標對象在“ DBSchema.HTDB_Cols”類型上的字段。
您的代碼已關閉。 有兩個問題,都位於linq select方法調用的參數中:
您的HTDB_Cols類是一個非靜態類,您嘗試檢索的字符串值是實例成員。 因此,當您嘗試將實例成員從類中拉出時,必須將類的實例傳遞給FieldInof.GetValue方法。 在下面的代碼中,我在變量“ instanceOfClass”中創建您的類的實例。 您可以在FieldInfo類的文檔中看到這一點
從FieldInfo.GetValue返回的值是一個對象。 您必須使用ToString方法或(string)強制轉換將其顯式轉換為字符串。
通過這兩個更改,您的方法就可以使用。 清單如下:
public class GetClassFields
{
public static List<string> AsList(string tbl)
{
var instanceOfClass = new HTDB_Cols();
return typeof(HTDB_Cols).GetNestedTypes()
.First(t => String.Compare(t.Name, tbl, true) == 0)
.GetFields()
.Select(f => f.GetValue(instanceOfClass).ToString())
.ToList<String>();
}
}
您可以按以下方式調用此函數:
var fields = GetClassFields.AsList("TblCustomers");
返回所需的信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.