获取Func的属性

时间:2014-03-13 11:55:28

标签: c# reflection func

我需要检查传入的Func<TIn, TOut>是否有特定属性。

到目前为止,我有:

var methodInfo = cachedMethod.GetMethodInfo();
var isCachable = methodInfo.CustomAttributes.
                       Any(x => x.AttributeType == typeof(CachedAttribute));

但是我发现CustomAttributes属性为空。

找到应用于传入函数的属性的正确方法是什么?在我的例子中,func是另一个类中的静态方法。

更新

这是一个小样本,展示了我如何尝试使用它:

HTML帮助:

        public static IHtmlString CachedPartial<TModel>(this HtmlHelper helper, 
          string partialName, 
          TModel model, 
          Func<string, string> cachedMethod)
        {
            var methodInfo = cachedMethod.GetMethodInfo();
            var isCachable = methodInfo.IsDefined(typeof (CachedAttribute));

            if (!isCachable)
            {
                throw new Exception("...");
            }

            return new MvcHtmlString(cachedMethod("foo"));
        }

缓存的方法

        [Cached]
        public static string GenrateSiteMapGraphHtml(string siteCode)
        {
            return "Foo";
        }

这是从Razor视图调用的:

@Html.CachedPartial("Foo", 
                     Model, 
                     HtmlHelperExtensions.GenrateSiteMapGraphHtml)

1 个答案:

答案 0 :(得分:0)

我可能不太明白你的问题是什么,但我会建议两件事:

  1. 您需要确保CustomAttributes不为空,请使用

    if(methodInfo.CustomAttributes!= NULL)//或者该类型的属性为NULL的类似物    {/ 某些行动 /}

  2. 您无法弄明白为什么此属性为空。要检查的第一件事是可见性。
  3.   

    在我的例子中,func是另一个类中的静态方法

    那么去看看你试图调用那个静态方法的代码区域是否可见该类