2009-09-15 84 views
5

下面是代碼我想用:使用一個枚舉作爲屬性參數

public enum Days { Sat = 1, Sun, Mon, Tue, Wed, Thu, Fri }; 

[EnumHelper(typeof(Days))] 
public Days DayOfWeek { get; set; } 

EnumHelper樣子:

[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)] 
public class EnumHelper : Attribute 
{ 
    public Type MyEnum { get; set; } 
    public EnumHelper(Type enum) 
    { 
     MyEnum = enum; 
    } 
} 

我得到EnumHelper(天數)的錯誤是「枚舉名稱在此時無效「。我做錯了什麼,還是不能這樣做?

更多信息

我試圖通過枚舉(天數),並隨機找回值之一。 NEVERMIND:我過分複雜化了這部分。

回答

8

在屬性的參數可以是唯一的常數。 如果你想通過你必須通過唯一的類型枚舉類型:

[EnumHelper(typeof(Days))] 
public Days DayOfWeek { get; set; } 


[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)] 
public class EnumHelper : Attribute 
{ 
    public Type MyEnum; 
    public EnumHelper(Type enum) 
    { 
     MyEnum = enum; 
    } 
} 
0

的參數應該是一個枚舉值,而不是一個枚舉類型,如:

[EnumHelper(Days.Sat)] 
+2

由於從'Days.Sat'到'Enum'的裝箱轉換,這將不起作用。 – 2009-09-15 18:22:47

+1

它不會?我一直認爲傳遞常量值作爲值類型與屬性一起工作。 – 2009-09-15 18:25:02

15

你試圖傳遞一個類型名稱就好像它是一個參數值。你不能那樣做。但是,你可以這樣做:

[AttributeUsage(AttributeTargets.Property,AllowMultiple=true)] 
public class EnumHelper : Attribute 
{ 
    public Type EnumType; 
    public EnumHelper(Type enumType) 
    { 
     EnumType = enumType; 
    } 
} 

... 

[EnumHelper(typeof(Days))] 
public Days DayOfWeek { get; set; } 

但是:

  • 我不會親自做EnumType公共領域;使其成爲一種財產。
  • 目前還沒有驗證EnumType其實是一個枚舉。你不能在編譯時執行它,但你可以在執行時執行
  • 對於公約的緣故,它應該被稱爲EnumHelperAttribute(或更具描述性的,真正的) - 這不是導致錯誤,但它更地道
  • 我真的不知道我看到了好處.. 。你可以從元數據中找到屬性的類型;你認爲這個屬性實際上是在向你購買什麼?

如果您可以讓我們知道您要完成什麼,我們可能會對您更有用。

0

只是想添加我如何運行並修復它。我有我的財產與我的枚舉相同。該代碼會編譯並運行,但我在IDE中收到了紅線錯誤消息。將屬性名稱更改爲唯一的內容會清除消息。