데이터를 동적으로 수집하고이 데이터를 저장할 데이터 구조로 Dictionary<int, string>
을 선택했습니다. 나는 templatesKeyName
이 요청에 대한 모든 INT의 쌍 (IDS) 및 이름와 관계있는을 포함 할사전의 키와 값을 얻는 방법
Dictionary<int, string> templatesKeyName = new Dictionary<int, string>();
방법의 말 : 내 방식의 시작 부분에서
나는 변수를 선언합니다.private static Dictionary<int, string> GetTemplateForUserWithAccount()
{
Dictionary<int, string> kv = new Dictionary<int, string>();
//populate the `kv` dictionary
return kv;
}
와 내가 좋아하는 뭔가를 할 수 있도록하려면 : 그래서 예를 들어 내가 가진
if(Client.Accounts.Count > 0)
{
templatesKeyName.Add(GetTemplateForUserWithAccount());
}
은 분명히 .Add()
확장은 두 개의 인수를 기대하지만 난 방법을 전달할 수 있습니다 밖으로 찾을 수 없습니다 그 결과 값을 임시 사전에 할당 한 다음 foreach
으로 반복합니다. 또한 대부분의 경우 단일 결과를 얻을 것이므로 반복은 제가 실제로 고려해야 할 사항이 아니기 때문일 수 있습니다.
public static void AddRange<T,K>(this Dictionary<T,K> source, IEnumerable<KeyValuePair<T,K>> values)
{
foreach(var kvp in values)
{
if(!source.ContainsKey(kvp.Key))
source.Add(kvp.Key, kvp.Value);
}
}
을 그리고 다음과 같이 사용 :
반복 코드에서 또는 전화를하는 방법에 하나 일어날 수 있습니다. 'foreach (GetTemplateForUserWithAccount()의 var 항목) templatesKeyName.Add (item.Key, item.Value)'의 문제점은 무엇입니까? – adrianm
@adrianm 뭔가 잘못되었지만'Selman22' 답변에서 볼 수 있듯이 - 비슷한 방법을 호출 할 때마다 반복 논리를 작성할 필요가 없기 때문에 여전히 논리를 한 곳에 유지하는 방법이 있습니다. 또한, 다른 콜렉션들은 기본적으로'AddRange'를 구현합니다. 그래서 나는 그 값들을 추가하는 더 좋은 방법이 있어야한다고 생각했습니다. – Leron
나는 코드의 관리자에 대해 단순한 생각을하고있었습니다. 이제 갑자기 모든 사전에'.AddRange'가 추가 될 것입니다. 관리자는 실제로'.AddRangeIfNotExists'를 할 때'.AddRangeReplaceExisting'으로 작동 할 것으로 기대하는 다른 곳에서 그것을 사용하기 시작합니다. 좋은 메소드 네이밍 및 문서화로 당연히 해결할 수 있지만 문제가 될만한 가치가 있습니다. – adrianm