2011-12-22 2 views
2

я продлил IDictionary так:Способ вызова метода расширения IDictionary (отражение)?

public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new() 
{ 
    T someObject = new T(); 

    foreach (KeyValuePair<string, string> item in source) 
    { 
     someObject.GetType().GetProperty(item.Key).SetValue(someObject, item.Value, null); 
    } 

    return someObject; 
} 

И у меня возникают проблемы, используя метод, пробовал так:

TestClass test = _rep.Test().ToClass<TestClass>; 

И он говорит, что не может преобразовать непредставленных тип делегата.

Каков порядок его вызова?

/Lasse

  • UPDATE *

Изменен код:

public static T ToClass<T>(this IDictionary<string, string> source) where T : class, new() 
{ 
    Type type = typeof(T); 
    T ret = new T(); 

    foreach (var keyValue in source) 
    { 
     type.GetProperty(keyValue.Key).SetValue(ret, keyValue.Value, null); 
    } 

    return ret; 
} 

ответ

5

Вы отсутствующего скобки на конце:

TestClass test = _rep.Test().ToClass<TestClass>(); 

Компилятор думал, что вы хотите назначить метод (делегат) переменной.


Кроме того, вместо того, чтобы someObject.GetType() вы могли бы использовать typeof(T), я бы создать переменную вне цикла и использовать его тоже.

+0

Спасибо большое, Джордж, веселый xmas :) –