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

特定のフィールド名を取得して、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
于 2012-12-06T19:28:19.053 に答える