C# AttributeUsage для определенного класса

Enum.ToObject(.... то, что Вы ищете!

C#

StringComparison enumValue = (StringComparison)Enum.ToObject(typeof(StringComparison), 5);

VB.NET

Dim enumValue As StringComparison = CType([Enum].ToObject(GetType(StringComparison), 5), StringComparison)

, Если Вы делаете много Перечисления, преобразовывающего попытку с помощью следующего класса, это сохранит Вас много кода.

public class Enum<EnumType> where EnumType : struct, IConvertible
{

    /// <summary>
    /// Retrieves an array of the values of the constants in a specified enumeration.
    /// </summary>
    /// <returns></returns>
    /// <remarks></remarks>
    public static EnumType[] GetValues()
    {
        return (EnumType[])Enum.GetValues(typeof(EnumType));
    }

    /// <summary>
    /// Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object.
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static EnumType Parse(string name)
    {
        return (EnumType)Enum.Parse(typeof(EnumType), name);
    }

    /// <summary>
    /// Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object.
    /// </summary>
    /// <param name="name"></param>
    /// <param name="ignoreCase"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static EnumType Parse(string name, bool ignoreCase)
    {
        return (EnumType)Enum.Parse(typeof(EnumType), name, ignoreCase);
    }

    /// <summary>
    /// Converts the specified object with an integer value to an enumeration member.
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static EnumType ToObject(object value)
    {
        return (EnumType)Enum.ToObject(typeof(EnumType), value);
    }
}

Теперь вместо того, чтобы писать (StringComparison)Enum.ToObject(typeof(StringComparison), 5); можно просто записать Enum<StringComparison>.ToObject(5);.

9
задан Donut 22 December 2010 в 13:21
поделиться

3 ответа

Нет. В структуре нет ничего, что могло бы сделать это.

Однако код, который использует рассматриваемый атрибут, всегда может проверить, является ли тип класса конкретным классом (или одним из его подклассов). ).

Атрибуты сами по себе ничего не делают - так что это должно иметь тот же эффект.

11
ответ дан 4 December 2019 в 08:33
поделиться

Сделать все данные в атрибуте доступными только с помощью общедоступного статического метода, который берет нужный вам класс и проверяет, имеет ли он данный атрибут.

0
ответ дан 4 December 2019 в 08:33
поделиться

Один из способов сделать это, если у вас есть доступ к определенному классу, подробно описан Марком Гравелом здесь: http://marcgravell.blogspot.com/2009/06/restricting -attribute-usage.html . По сути, вы реализуете атрибут как защищенный класс определенного типа. Тогда он может использоваться только этим типом.

14
ответ дан 4 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: