4

ラムダを属性パラメーターとして追加できないのはなぜですか? たとえば、私はやりたい:

[MyAttribut(Transform= {object => object.ToSomethingElse()})]

C# のラムダは単なるクロージャーであることを理解する必要がありますか?

編集: すべての回答を見て、ほとんどの人が知らないと思われることを 1 つ正確に説明します。ラムダは、クロージャでない限り、コンパイル時の構造である文字通りです。

4

3 に答える 3

4

属性へのパラメーターは、コンパイル時の定数である必要があります。

MSDN から - Attribute Parameter Types :

属性に渡される値は、コンパイル時にコンパイラに認識されている必要があります。

また、次のタイプに制限されています。

  • ブール
  • char、unsigned char
  • ショート、符号なしショート
  • 整数、符号なし整数
  • ロング、符号なしロング
  • __int64、符号なし __int64
  • フロート、ダブル
  • wchar_t
  • char* または wchar_t* または System::String*
  • システム::タイプ ^
  • システム::オブジェクト ^
  • 列挙
于 2012-06-08T15:06:39.510 に答える
4

属性パラメーターは、次の型の定数値に制限されています。

  • 単純型 (bool、byte、char、short、int、long、float、および double)

  • ストリング

  • システムタイプ

  • 列挙

  • object (タイプ object の属性パラメーターへの引数は、上記のタイプのいずれかの定数値でなければなりません。)

  • 上記のいずれかのタイプの 1 次元配列

http://msdn.microsoft.com/en-us/library/aa288454%28VS.71%29.aspx

于 2012-06-08T15:07:42.790 に答える