私はC#の注釈がありますどのようにしてFuncをC#属性(アノテーション)に入れますか?
[AttributeUsage(AttributeTargets.Method)]
public class OperationInfo : System.Attribute {
public enum VisibilityType {
GLOBAL,
LOCAL,
PRIVATE
}
public VisibilityType Visibility { get; set; }
public string Title { get; set; }
public Func<List<string>, List<string>> Func;
public OperationInfo(VisibilityType visibility, string title, Func<List<string>, List<string>> function) {
Visibility = visibility;
Title = title;
Func = function;
}
}
あなたが見ることができるように、のFuncであると私はそれを動的に呼び出したいプロパティがあります。基本的には、このアノテーションを持つすべてのメソッドを解析し、アノテーションにバインドされたFuncを呼びたいと思います。
私は、この(これは文字列を取得し、同じ文字列を返すエコー機能の簡単な例である)のようにそれを使用したい:私は私の中ではエラーを得なかっまし
[OperationInfo(OperationInfo.VisibilityType.GLOBAL, "echo", IDoEcho)]
public static string DoEcho(string a)
{
return a;
}
[OperationInfo(OperationInfo.VisibilityType.PRIVATE, null, null)]
public static List<string> IDoEcho(List<string> param) {
return new List<string>() { DoEcho(param[0]) };
}
アノテーションクラスですが、ソリューション全体を再生成する場合、アノテーションを使用してメソッドを宣言するたびに、アノテーションでリテラルを使用する必要があることを示すエラーが表示されます。
制限があることを理解していますが、この問題を回避できる方法はありますか?私はFuncの代わりに文字列を使うことができ、文字列と同じ名前の関数を動的に見ているが、そうしたくないと思う。助けるため
感謝:)
コンパイル時に値を知っていなければならないので、属性の引数として文字列が見つかることがよくあります。 – danludwig