2013-07-03 3 views
0

Вот фрагмент кода перечисления я определила:Тестирование на CLSCompliance (или тестирование для любого атрибута)

public enum DataTypes 
{ 
    /// <summary> 
    /// Base class. 
    /// </summary> 
    Object = 0, 

    /// <summary> 
    /// True/false. 
    /// </summary> 
    Boolean = 1, 

    /// <summary> 
    /// Signed 8 bit integer. 
    /// </summary> 
    [CLSCompliant(false)] 
    Int8 = 2, 

Как проверить элемент для CLSCompliant истины/лжи?

+0

Возможный дубликат [Получение атрибутов значения Enum] (http://stackoverflow.com/questions/1799370/getting-attributes-of-enums-value) –

ответ

1

Как проверить элемент для CLSCompliant true/false?

Вы получаете соответствующий FieldInfo с помощью Type.GetField, а затем использовать MemberInfo.IsDefined.

Пример кода:

using System; 
using System.ComponentModel; 
using System.Globalization; 

public enum DemoEnum 
{ 
    Foo, 
    Bar, 
    [Description("This is a baz")] 
    Baz 
} 

class Test 
{ 
    static void Main() 
    { 
     foreach (var name in Enum.GetNames(typeof(DemoEnum))) 
     { 
      var field = typeof(DemoEnum).GetField(name); 
      Console.WriteLine("{0}: {1}", name, 
           field.IsDefined(typeof(DescriptionAttribute), 
               false)); 
     } 
    } 
} 

Если вам необходимо фактическое значение атрибута, вы должны были бы использовать вместо MemberInfo.GetCustomAttributes.

+0

Спасибо Jon :) Я адаптировал это, использовал Enum.GetName (), чтобы получить тот, который я хочу, и он отлично работает. Кажется немного тяжелым, что нужно использовать имя строки, чтобы получить это, вместо того, чтобы передавать тип (int) enum, но я предполагаю, что это связано с тем, что это также работает с методами. – IamIC

+1

@IanC: Ну, вы пытаетесь получить * поле * - и может быть несколько полей с одинаковым значением в перечислении. –

Смежные вопросы