【问题标题】:How to get a List of DataAnnotation Display Name [duplicate]如何获取 DataAnnotation 显示名称列表 [重复]
【发布时间】:2018-04-13 09:45:09
【问题描述】:

我有一个带有数据注释的类,需要从 Display 和属性 Name 中获取字符串列表。

我已经尝试了一些方法。 在方法 GetAttributesNames() 中。

internal class TVSystemViewData : BaseViewData
        {
            [Display(Name = "BoxType", Description = "")]
            public String BoxType { get; set; }

            [Display(Name = "BoxVendor", Description = "")]
            public String BoxVendor { get; set; }

            [Display(Name = "ClientId", Description = "")]
            public String ClientId { get; set; }

            [Display(Name = "HostName", Description = "")]
            public String HostName { get; set; }

            [Display(Name = "OSVersion", Description = "")]
            public String OSVersion { get; set; }
            [Display(Name = "SerialNumber", Description = "")]
            public String SerialNumber { get; set; }


            internal void GetAttributesNames()
            {
                var listOfFieldNames = typeof(TVSystemViewData)
                .GetProperties()
                .Select(x =>  x.GetCustomAttributes(typeof(DisplayAttribute), true))
                .Where(x => x != null)
                .ToList();

            }
}

【问题讨论】:

  • 那么这有什么作用或没有作用?您必须将属性转换为 DisplayAttribute 才能访问其 Name 属性。

标签: c# .net data-annotations


【解决方案1】:

这可能会有所帮助

internal List<string> GetAttributesNames()  //changed type returned
    {
        return  typeof(TVSystemViewData)
          .GetProperties()                //so far like you did
          .SelectMany(x=>x.GetCustomAttributes(typeof(DisplayAttribute),true) //select many because can have multiple attributes
          .Select(e=>((DisplayAttribute)e))) //change type from generic attribute to DisplayAttribute
          .Where(x => x != null).Select( x => x.Name) //select not null and take only name
          .ToList(); // you know ;)
    }

希望对你有帮助

【讨论】:

    【解决方案2】:

    试试这个:

    class Program
    {
        static void Main(string[] args)
        {
            var data = new TVSystemViewData();
    
            var listOfDisplayNames = data.GetAttributesNames();
        }
    }
    
    internal class TVSystemViewData
    {
        [Display(Name = "XXXXX", Description = "")]
        public String BoxType { get; set; }
    
        [Display(Name = "BoxVendor", Description = "")]
        public String BoxVendor { get; set; }
    
        [Display(Name = "ClientId", Description = "")]
        public String ClientId { get; set; }
    
        [Display(Name = "HostName", Description = "")]
        public String HostName { get; set; }
    
        [Display(Name = "OSVersion", Description = "")]
        public String OSVersion { get; set; }
        [Display(Name = "SerialNumber", Description = "")]
        public String SerialNumber { get; set; }
    
        internal List<string> GetAttributesNames()
        {
            return typeof(TVSystemViewData)
                .GetProperties()
                .Select(x => ((DisplayAttribute) x.GetCustomAttribute(typeof(DisplayAttribute), true)).Name)
                .ToList();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      相关资源
      最近更新 更多