그것은 당신이 어떤 임의의 제네릭 형식에 string
의를 할당 할 수 있기 때문에 여기에 제네릭을 사용하는 것이 이해가되지 않습니다 :
IDictionary<string, string> dict = new Dictionary<string, string>();
public void copyFrom(NameValueCollection a)
{
foreach (var k in a.AllKeys)
{
dict.Add(k, a[k]);
}
}
당신은 아마 대신 새 사전을 만들 수있는 방법을 만들어야합니다 있지만 :
public static IDictionary<string, string> ToDictionary(this NameValueCollection col)
{
IDictionary<string, string> dict = new Dictionary<string, string>();
foreach (var k in col.AllKeys)
{
dict.Add(k, col[k]);
}
return dict;
}
당신처럼 사용할 수있는 :
NameValueCollection nvc = //
var dictionary = nvc.ToDictionary();
하는 경우 당신이 당신의 사전이 항상 문자열을 포함하는 것이라는 것을 알고 있다면 포함을 지정
public static Dictionary<TKey, TValue> ToDictionary<TKey, TValue>(this NameValueCollection col)
{
var dict = new Dictionary<TKey, TValue>();
var keyConverter = TypeDescriptor.GetConverter(typeof(TKey));
var valueConverter = TypeDescriptor.GetConverter(typeof(TValue));
foreach(string name in col)
{
TKey key = (TKey)keyConverter.ConvertFromString(name);
TValue value = (TValue)valueConverter.ConvertFromString(col[name]);
dict.Add(key, value);
}
return dict;
}
출처
2013-05-14 18:01:23
Lee
아마도 이것은 'TKey','TValue' 유형 매개 변수를 선언하는 제네릭 유형 * 및 * 메소드 *가 해당 유형 매개 변수를 선언하기 때문에 매우 혼란 스럽습니다. 거기에 키가 항상 문자열이된다는 사실을 추가하십시오 ... 그렇다면 TKey가 Guid 일 경우 어떻게 될 것으로 예상합니까? –
함께 작업하려면 일반 사전이 필요합니다. NameValueCollection 객체에서 키와 값을 복사 할 수있는 serialize 가능한 사전 클래스를 작성하는 것임을 참고하십시오. – Kobojunkie
TKey가 문자열이 아닌 경우 다시 무엇을할까요? –