2017-02-26 69 views
0

屬性我已經從System.Attribute繼承了這個非常基本的類庫。我還將它作爲一個程序集簽名,以便該DLL可以在另一個程序中使用。C#從外部類庫

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

您已經定義了BearData屬性上Program.Main結合()方法,所以你應該尋找有

下面的代碼應該解決您的問題

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(); 
     } 
    } 
} 
+1

這也肯定得到它的工作第一次嘗試的屬性。非常感謝! –