カスタム属性でメンバーを装飾する目的で、CIL で配列リテラルを定義するための構文は何ですか?
CIL (ilasm.exe を使用してコンパイル) でいくつかの .NET コードを作成しており、カスタム属性でメソッドを装飾する必要があります。その属性のコンストラクターは、唯一のパラメーターとして整数の配列を取ります。CILでこれを行うにはどうすればよいですか?
これは、カスタム属性のコンストラクターの署名です (変更できません)。
public FooAttribute(int[] values) {
// some hidden constructor stuff
}
これは、C# で記述している場合にメソッドを装飾する方法です (ただし、できません)。
[Foo(new int[] {1, 2, 3, 4})]
public string Bar() {
return "Some text";
}
ildasm.exe を使用してコンパイル済みの C# を確認すると (リバース エンジニアリングによって理解しようとするため)、見苦しく使用できないバイナリ リテラルが得られます。代わりに Reflector.NET を使用してみましたが、見た目はずっと良くなりましたが、ilasm.exe はキーワード「new」で構文エラーをスローするため、使用できません。
.custom instance void SomeNamespace.FooAttribute::.ctor(int32[]) = { new int32[int32(4)] { int32(1), int32(2), int32(3), int32(4) } }