0

我正在尝试使用系统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是当前的

  • 如何在没有 foreach 的情况下获取特定字段名称并找出其值?

问题的来源在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”,所以这就是我可以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;
}
4

1 回答 1

1

How Can i get to a specific field name and find out its value without the foreach?

Create a generic extension Method which will handle any object and then internally do a 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;

}

Then get the value as such (casting to show that it handles unknown objects)

object detail = (object) new DBMetaDetails.DbTable() { TableName = "Jabberwocky", TableID = 12 };

Console.WriteLine ( detail.ExtractIntProperty("TableID") ); // 12
于 2012-12-06T19:28:19.053 回答