[英]using lambda to extract member info via System.Reflection
我正在嘗試使用系統Reflection
來啟用類member
提取(類型int
)
var CurrTblID = typeof(currProjData).GetMembers(
BindingFlags.Public |BindingFlags.Static
).Select(t => t.Name)...what expresssion should I put here?
這將公開一個enumerator
,具有接口iEnumerable
並將其分配給CurrTblID
所以我可以使用foreach
循環,找到哪個“表ID” Tid
是當前的
問題的來源在currProjData
類中,如下所示。
答案需要一些背景:
在這段代碼中,我使用的結構允許設置帶有詳細信息的Sql server
數據庫表,以供以后使用。
我在sql server中找不到答案,所以我做了一個結構來保存自定義index
-作為我將在應用程序中使用的每個表的數字ID
。
public class DBMetaDetails
{
public struct DbTable
{
public DbTable(string tableName, int tableId): this()
{
this.TableName = tableName;
this.TableID = tableId;
}
public string TableName { get; set; }
public int TableID { get; set; }
}
}
TableID
是我通過該結構使用的自定義數字“ id”,因此這就是我可以通過自定義“ index”而不是其數據庫名稱引用SQL table
方式。
public static class currProjData
{
static DBMetaDetails.DbTable CustomersMeta = new DBMetaDetails.DbTable();
static DBMetaDetails.DbTable TimesMeta = new DBMetaDetails.DbTable();
public static void SetTablesMetaDetails()
{
TimesMeta.TableID = HTtIDs.TblTimes;
TimesMeta.TableName = HTDB_Tables.TblTimes;
CustomersMeta.TableID = HTtIDs.TblCustomers;
CustomersMeta.TableName = HTDB_Tables.TblTimeCPAReport;
}
public static readonly int CustomersTid = CustomersMeta.TableID;
public static readonly string CustomersTblName = CustomersMeta.TableName;
public static readonly int TimesTid = TimesMeta.TableID;
public static readonly string TimesTblName = TimesMeta.TableName;
}
我如何才能獲得特定的字段名稱並在沒有foreach的情況下找出其值?
創建一個通用擴展方法,該方法將處理任何對象,然后在內部執行FirstOrDefault:
public static int ExtractIntProperty<T>( this T targetItem, string propertyName )
{
int result = 0;
var prop = targetItem.GetType()
.GetProperties()
.FirstOrDefault( prp => prp.Name == propertyName );
if (prop != null)
{
var val = prop.GetValue( targetItem, null );
if (val != null)
result = (int) val;
}
return result;
}
然后按原樣獲取值(通過廣播顯示它可以處理未知對象)
object detail = (object) new DBMetaDetails.DbTable() { TableName = "Jabberwocky", TableID = 12 };
Console.WriteLine ( detail.ExtractIntProperty("TableID") ); // 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.