【发布时间】:2012-01-17 19:37:39
【问题描述】:
我有一个 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。
我想这样使用它(这是一个简单的 echo 函数示例,它获取一个字符串并返回相同的字符串):
[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]) };
}
我的 Annotation 类没有错误,但是在重新生成整个解决方案时,每次我声明一个带有注释的方法时,我都会遇到一个错误,告诉我必须在注释中使用文字。
我知道存在限制,但有什么办法可以避免这个问题吗?我知道我可以使用字符串而不是 Func,并动态查找名称与字符串相同的函数,但我不想这样做。
感谢您的帮助:)
【问题讨论】:
-
它可能看起来不太漂亮,但您经常会发现字符串作为属性的参数,因为在编译时必须知道这些值。
标签: c# reflection attributes