2016-04-14 14 views
0

私は既存のオブジェクトを\ IEnumerable<KeyValuePair<String, String>>に変換したいのですが、ここで指定されたプロパティの名前と値は与えられた値プロパティ。 既存のプロパティを `IEnumerable <KeyValuePair <String、String >>`に変換します

は、私はこれを見つけましたが、これはかなり私のシナリオに適合しない:

automapper Iましたこの:?

List<KeyValuePair<String, Object>> list = new List<KeyValuePair<String, Object>>(); 

foreach (var prop in genericType.GetType().GetProperties()) 
{ 
    list.Add(new KeyValuePair<String, Object>(prop.Name, prop.GetValue(genericType, null))); 
} 

がそうであれば genericTypeがどのように(、リフレクションを使用しない方法があります私が知っているタイプ)

+1

は、「リフレクションを使用しない方法はあります」 Prop1 "、o.Prop1)、新しいKeyValuePair <文字列、文字列>(" Prop2 "、o.Prop2)、...}'となります。しかし、それはより多くのキーストロークです。この場合のあなたの牛肉は何ですか? –

+0

@ Jeroen Mostertもっと自動であるべきです。なぜなら、時には別のオブジェクトですが、 – kkkk00999

答えて

1

これを反映させる方法はありません。 「( `新しい[] {新しいKeyValuePair <文字列、文字列>: - :ここでは、そのために使用ToDictionary方法であることを確認だけで、明示的にすべてを書き、

/// <summary> 
///  Gets all public properties of an object and and puts them into dictionary. 
/// </summary> 
public static IDictionary<string, object> ToDictionary(this object instance) 
{ 
    if (instance == null) 
     throw new NullReferenceException(); 

    // if an object is dynamic it will convert to IDictionary<string, object> 
    var result = instance as IDictionary<string, object>; 
    if (result != null) 
     return result; 

    return instance.GetType() 
     .GetProperties() 
     .ToDictionary(x => x.Name, x => x.GetValue(instance)); 
} 
+0

の場合は、この場合にはArgumentNullExceptionをスローする必要があるからです。 –

+0

私はこれについて何も慣習を見ていないので、メソッドの使用法に基づいて 'NullReferenceException'を選択しました。私は通常、 'nullObject.SomeMethodCall()'が 'ArgumentNullException'ではなく' NullReferenceException'を投げることを期待しています。 –

+0

'if(instance == null)'は 'instance.SomeMethod()'と似ていません。後者は 'NullReferenceException'を引き起こす可能性があります。 –

関連する問題