일반 함수로 전달 된 사전을 반복하는 데 문제가 있습니다. 예를 들어 DB에서 데이터를로드하는 함수가 있습니다.C# 사전을 통해 반복하여 전달됨
public T Load<T>(...)
이 함수는 다음과 같이 호출 할 수 있습니다.이 함수는 아무런 문제가 없습니다.
someclasstype data = Load<someclasstype>(...);
List<someclasstype> data = Load<List<someclasstype>>(...);
나는 최근에이뿐만 아니라 사전 처리 할 수 있도록 확장하기 위해 노력하고, 그래서처럼 호출했습니다
Dictionary<long, someclasstype> data = Load<Dictionary<long, someclasstype>>(...)
내가 문제없이 데이터를로드 할 수 있습니다에 저장 사전에 문제 없습니다. 모든 keyvaluepairs이 단계, 사전,에서
는 결과라는 변수에 저장되고, 나는 지금까지IEnumerator resultIdx = ((IEnumerable)result).GetEnumerator();
if (!resultIdx.MoveNext())
return (T)result;
object kvp = resultIdx.Current;
으로 너무 좋아를 IEnumerable을 만드는거야. 시계의 키 값과 값 또는 kvp 변수의 마우스 오버를 볼 수 있습니다.
그러나 kvp에서 keyvalue 쌍의 값 부분을 얻는 방법을 알 수 없습니다.
// None of these work - I get compile time errors, unboxing errors, or invalid cast errors.
object item = ((KeyValuePair<TKey, TValue>)kvp).Value;
object item = ((KeyValuePair<long, object>)kvp).Value;
object item = ((T)kvp).Value // Never had a hope for this, but desperation...
누구에게 어떻게 할 수 있습니까?
반사를 사용합니까? '객체 키 kvp.GetType(). GetProperty ("Key"). GetValue (kvp); 개체 값 kvp.GetType(). GetProperty ("값"). GetValue (kvp); ' 매우 최적화되지는 않았지만 작동 할 수 있습니다 ... – Dede
굉장하고, 감사합니다 ... 완벽하게 작동합니다. 이 함수는 이미 리플렉션을 많이 사용하므로 Im (속도는 그대로)에 대해 걱정하지 않습니다. –
열거자를 가진 부분은 'Load'함수의이 부분입니까, 아니면'Load ' 외부입니까? 왜냐하면 외부에 있다면'Dictionary '에서 제공하는 정확한'GetEnumerator' 메서드를 사용하는 것이 어떨까요? –
ckruczek