自定义程序集属性为字符串

本文关键字:字符串 属性 程序集 自定义 | 更新日期: 2023-09-27 18:06:58

我已经定义了一个自定义程序集属性,我试图把它称为一个字符串,就像我以前的帖子调用自定义程序集属性。我现在正尝试用c#完成同样的事情。

我已经定义了自定义属性:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Reflection;
namespace authenticator.Properties
{
    public class SemverAttribute : Attribute
    {
        private string _number;
        public string getversion
        {
            get {return _number;}
        }
        public SemverAttribute(string Number)
        {
            _number = Number;
        }
    }
}

和我试图调用它:

// Define the semver version number
Assembly assy = Assembly.GetExecutingAssembly();
object[] attr = null;
attr = assy.GetCustomAttributes(typeof(SemverAttribute), false);
if (attr.Length > 0)
  {
    ViewBag.Version = attr[0].getversion;
  }
else
  {
    ViewBag.Version = string.Empty;
  }

然而,当试图建立我得到:

'object'不包含'getversion'的定义扩展方法'getversion'接受类型的第一个参数可以找到'object'(您是否缺少using指令或装配参考?)

自定义程序集属性为字符串

您只需要强制转换,因为Assembly.GetCustomAttributes(xxx)返回类型是Object[]

ViewBag.Version = (attr[0] as SmverAttribute).getversion;

编辑

可以这样重写(例如)

var attribute = Assembly.GetExecutingAssembly()
                        .GetCustomAttributes(false)
                        .OfType<SemverAttribute>()
                        .FirstOrDefault();
ViewBag.version = (attribute == null)
                  ? string.Empty
                  : attribute.getversion;