にジェネリックのIEnumerable
CountryId
と
CountryName
を言及する必要があるが、私はそれを避けたいと
generic method
を作成しようとしています。
public struct KeyValueStruct
{
public int Key { get; set; }
public string Value { get; set; }
}
private static IEnumerable<KeyValueStruct> ConvertPocoToKeyValueList(IEnumerable<CountryPoco> list)
{
var result = new List<KeyValueStruct>();
if (list != null)
{
foreach (var item in list)
{
result.Add(new KeyValueStruct()
{
Key = item.CountryId,
Value = item.CountryName
});
}
}
return result;
}
最初のプロパティは常に整数(この例ではCountryId)であり、2番目のプロパティはStringであることがわかります。
私はGenerics
を使用して実装しようとしていましたが、これが最良の方法であるかどうかはわかりません。私の提案したコード(動作しません)を参照してください。
private static IEnumerable<KeyValueStruct> ConvertPocoToKeyValueList<T>(T list)
{
var result = new List<KeyValueStruct>();
if (list != null)
{
foreach (var item in list)
{
result.Add(new KeyValueStruct()
{
Key = item.CountryId,
Value = item.CountryName
});
}
}
return result;
}
同じ結果を得るための良い考えがある場合は、提案してください。
「KeyValueStruct」とは何ですか? .NET Frameworkから 'KeyValuePair 'を使用していない理由は何ですか? LINQはすべてのことを自明にしています。btw ... 'var result = countries.Select(c => new KeyValuePair (c.CountryId、c.CountryName).ToList();'入力がnullの場合はおそらく...しかし、あなたはそれが起こっていることを防ぐ方が良いかもしれません。 –
@JonSkeet:私はKeyValueStructを逃して質問に追加したことに気付きました。カスタム構造を持つことはパフォーマンス面ではるかに速いため、.NETのデフォルトのKeyValuePairを使用するのではなく、独自の実装を行うことにしました。 'c.CountryId、c.CountryName'をハードコーディングしないようにする方法はありますか? –
Um 'KeyValuePair'は既に構造体です...あなた自身の' KeyValueStruct'型についてもっと速いと思いますか?確かにそれは可変値型です。違いはありますが、正の値ではありません。 –