2017-05-13 3 views
0

C#のオブジェクトは、実行時に目的の属性の名前が文字列として提供されている場合、 ?オブジェクト名["foo"]のように、属性名を文字列として使用して属性値を取得する方法

myObject["price"] 

のは、我々は、このオブジェクトを持っているとしましょう:

public class Widget 
{ 
    public Widget(){} 
    public DateTime productionDate {get;set;} 
    public decimal price {get;set;} 
} 

と、このSqlCommandオブジェクトパラメータの定義:異なる範囲内の他の場所でのコードで

SqlCommand c = new SqlCommand(); 
c.Parameters.Add(new SqlParameter("@price", SqlDbType.SmallMoney,0,"price")); 

、ユーザーが[Save Record]をクリックしましたウィジェットオブジェクトの値を更新コマンドのパラメータにバインドする必要があります。私たちは、変数commandでそのSqlCommandオブジェクトへの参照を持っている:Crowcoderへ

foreach (SqlParameter p in command.Parameters) 
{  
    // assume `parameter.SourceColumn` matches the widget attribute name 

    string attributeName = p.SourceColumn; 

    p.Value = widget[attributeName]  // ?? 
    } 
+2

私はあなたが "プロパティ"を意味すると思いますが、それはc#で独自の意味を持つ属性ではありません。もちろん、Reflectionを使用してプロパティ値を名前で取得することもできます。 – Crowcoder

+0

あなたが参照しているように_exactly_プロパティにアクセスするには、キーアクセサーの 'public TValue this [TKey key] {get;}を使って値を取得するための' Dictionary '型が必要です。セット; } ' –

答えて

1

追加:

あなたはリフレクションを使用して呼び出すことができますどのPropertyInfoを取得するにはType.GetProperty(「nameOfProperty」)を呼び出すことができますGetMethodプロパティ。

GetMethodプロパティは、Invokeメソッドを呼び出してプロパティの値を取得できるMethodInfoを返します。例えば

var propertyInfo = myObject.GetType().GetProperty("price"); 
var getMethod = propertyInfo.GetMethod; 
string value = getMethod.Invoke(myObject, null) as string 

編集:

もう一度あなたの質問を読んだ後、私は実現し、私はあなたの質問に答えませんでした。 私は以前の答えをインデクサーと組み合わせるべきです: https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/indexers/index

関連する問題