尝试获取属性始终会导致null

时间:2014-04-22 13:10:06

标签: c# attributes null

这里的第一个问题,但是一个沉重的stackflow用户/爱好者。

我遇到的问题是属性始终为null。以下显示了如何使用该属性:

    [Format("d")]
    public DateTime InvoiceDate { get; private set; }

属性定义如下:

    using System;

    namespace XXX.Aspnet.Binding
    {
        [AttributeUsage(AttributeTargets.Property)]
        public class FormatAttribute : Attribute
        {
            #region Properties

            public string Format { get; set; }

            #endregion

            #region Constructors

            public FormatAttribute(string format)
            {
                Format = format;
            }

            #endregion
        }
    }

我已经编写了一个扩展方法作为获取属性的代码,如果有点难看。其内容如下:

    using System.Linq;
    using System.Reflection;

    namespace XXX.Aspnet.Binding.Extensions
    {
        internal static class GetCustomAttributeExtension
        {
            #region GetCustomAttribute

            public static TAttribute GetCustomAttribute<TAttribute>(this PropertyInfo                 propertyInfo, bool inherit = false)
            {
                return propertyInfo.GetCustomAttributes(typeof(TAttribute), inherit).Cast<TAttribute>().FirstOrDefault();              
            }

            #endregion
        }
    }

最后,检索属性的调用如下:

    var formatAttribute = pi.GetCustomAttribute<FormatAttribute>();

有谁能说明为什么这不起作用?我也试过没有扩展方法的传统方式。

被修改

根据Sebi关于机会的建议使得setter私有化,我们得到了解决,而其他人发现代码有用

0 个答案:

没有答案