来自外部类库的C#属性

时间:2017-02-26 01:48:16

标签: c# attributes

我有这个非常基本的类库,它继承自System.Attribute。我还将它作为程序集签名,因此dll可以在另一个程序中使用。

namespace BearData
{
  public class BearData : Attribute
  {
    private string[] array1;
    private string bear = "Bear";
    private int weight;

    public BearData(string bear)
    {
        this.bear = bear;
    }
    public string Bear
    {
        get
        {
            return bear;
        }

        set
        {
            bear = value;
        }
    }

    public int Weight
    {
        get
        {
            return weight;
        }

        set
        {
            weight = value;
        }
    }

    public string[] BearTypes()
    {
        array1 = new string[8];
        array1[0] = "Brown/Grizzly";
        array1[1] = "Polar";
        array1[2] = "Asian Black";
        array1[3] = "American Black";
        array1[4] = "Sun";
        array1[5] = "Sloth";
        array1[6] = "Spectacled";
        array1[7] = "Giant Panda";

        return array1;
    }
  }
}

此处它用于基本控制台应用程序。然而,由于我的教授的神秘,模糊和神秘的性质,我仍然站在这个工作的立场。我从这一行得到一个错误:

bearAttribute = (BearData.BearData)attrs[0];
  

"未处理的类型' System.IndexOutOfRangeException'   发生在Assigntment5_Console.exe"是确切的错误。

我想我的具体问题是什么导致了这个错误?

但更一般地说,当它们来自外部库时,这是一种使用属性的好/正确方法吗?我觉得这里有随机数组并且我将数组转换为属性类似乎很奇怪?

顺便说一下。这就是我的教授为单个Visual Studio实例中隔离的属性类编写代码的方式。他还有一个类库dll导出的例子,我被留给自己的设备来弄清楚如何组合2。

using BearData;
namespace Assigntment5_Console
{
   class Program
  {

    [BearData.BearData("Bear", Weight = 1000)]

    static void Main(string[] args)
    {
        MemberInfo attributeInfo;
        attributeInfo = typeof(BearData.BearData);
        object[] attrs = attributeInfo.GetCustomAttributes(false);

        //for (int i = 0; i < attrs.Length; i++)
        //{
        //    Console.WriteLine(attrs[i]);
        //}
        BearData.BearData bearAttribute;
        bearAttribute = (BearData.BearData)attrs[0];


        Console.WriteLine("Animal: " + bearAttribute.Bear + "\nAverage Weight: " + bearAttribute.Weight);
        Console.ReadLine();
    }


   }
}

1 个答案:

答案 0 :(得分:1)

你已经在Program.Main()方法上定义了BearData属性,所以你应该在那里寻找属性

以下代码应解决您的问题

namespace Assigntment5_Console
{
    class Program
    {
        [BearData.BearData("Bear", Weight = 1000)]
        static void Main(string[] args)
        {
            MethodBase method = MethodBase.GetCurrentMethod();
            object[] attrs = method.GetCustomAttributes(typeof(BearData.BearData), true);   

            BearData.BearData bearAttribute;
            bearAttribute = (BearData.BearData)attrs[0];   

            Console.WriteLine("Animal: " + bearAttribute.Bear + "\nAverage Weight: " + bearAttribute.Weight);
            Console.ReadLine();
        }
    }
}