簡體   English   中英

使用枚舉作為屬性參數

[英]Using an Enum as an Attribute Argument

這是我要使用的代碼:

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(Days)上遇到的錯誤是“ Enum Name此時無效”。 我是在做錯什么,還是做不到?

更多信息

我試圖傳遞枚舉(天),並隨機取回其中一個值。

沒關系:我把這部分復雜化了。

您正在嘗試傳遞類型名稱 ,就像它是參數值一樣 你不能那樣做。 但是,您可以執行以下操作:

[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 (或更EnumHelperAttribute ,是更具描述性的)-這不會引起錯誤,但更常見
  • 我不確定我是否會從中受益,您已經可以從元數據中找到屬性的類型了。 您認為該屬性實際上在購買您什么?

如果您可以讓我們知道您要完成的工作,我們可能會對您有所幫助。

屬性中的參數只能是常量。 如果要傳遞枚舉類型,則必須僅傳遞類型:

[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;
    }
}

參數應該是枚舉值,而不是枚舉類型,例如:

[EnumHelper(Days.Sat)]

只是想補充一下我遇到的問題並加以解決。 我的財產與枚舉相同。 該代碼將編譯並運行,但是我在IDE中收到一條紅線錯誤消息。 將屬性名稱更改為唯一的名稱將清除該消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM