簡體   English   中英

使用system.reflection列出一個類文件

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

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