私は基本的にルックアップテーブルである大きな静的リストを持っているので、私はコードでテーブルを初期化します。カスタム・タイプでのコレクション初期化構文の使用
private class MyClass
{
private class LookupItem
{
public int Param1 { get; set; }
public int Param2 { get; set; }
public float Param2 { get; set; }
public float Param4 { get; set; }
}
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
new LookupItem() { Param1 = 1, Param2 = 2, Param3 = 3 Param4 = 4 },
new LookupItem() { Param1 = 5, Param2 = 6, Param3 = 7 Param4 = 8 },
//etc
}
}
本当LookupItem
は、より多くの特性を有しているので、私はよりコンパクトな初期化形式を可能にするためにコンストラクタを追加しました:
private class MyClass
{
private class LookupItem
{
public int Param1 { get; set; }
public int Param2 { get; set; }
public float Param2 { get; set; }
public float Param4 { get; set; }
public LookupItem(int param1, int param2, float param3, float param4)
{
Param1 = param1;
Param2 = param2;
Param3 = param3;
Param4 = param4;
}
}
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
new LookupItem(1, 2, 3, 4),
new LookupItem(5, 6, 7, 8),
//etc
}
}
は、私が本当にしたいことはフォーマット初期化子コレクションを使用していますオブジェクト自体のために私はすべての行にnew LookupItem()
を取り除くことができます。例:
private static List<LookupItem> _lookupTable = new List<LookupItem>()
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
//etc
}
これは可能ですか?私はそれがDictionary<>
のKeyValuePair
がこのように初期化できるのでそれが思うのが好きです。
MSDN国は:
コレクション初期化子は、あなたが IEnumerableをを実装コレクションクラスを初期化する際に使用すると、1つまたは複数の要素 intializersを指定できます。要素イニシャライザは、簡単な値、 式またはオブジェクト初期化子にすることができます。コレクション初期化子 を使用すると、ソースコード内の クラスのAddメソッドへの複数の呼び出しを指定する必要はありません。コンパイラは呼び出しを追加します。
LookupItem
クラスにIEnumerable
を実装して各パラメータを返す必要があるのですか?私のクラスはコレクションクラスではありません。
素晴らしい。どうもありがとうございました。 – GazTheDestroyer