Как я читаю атрибут на классе во времени выполнения?

Arrays.toString зацикливает каждый элемент в массиве, зацикливает и вызывает String.valueOf (element) для каждого элемента и добавляет их в результат StringBuilder.

String.valueOf (Box box) фактически вызывает box.toString (), поскольку класс Box не переопределяет метод toString (), тогда будет вызван родительский класс Object.toString () и className @ HexString (hashCode ( )) будут возвращены.

Вы можете либо переопределить метод toString () в Box, чтобы вернуть строковое значение высоты (будет напечатано [5, 3, 2]), либо высоту цикла и печати для каждого Box в массиве.

98
задан MrLore 12 November 2015 в 12:31
поделиться

4 ответа

public string GetDomainName<T>()
{
    var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
    ).FirstOrDefault() as DomainNameAttribute;
    if (dnAttribute != null)
    {
        return dnAttribute.Name;
    }
    return null;
}

ОБНОВЛЕНИЕ:

Этот метод можно обобщить для работы с любым атрибутом:

public static class AttributeExtensions
{
    public static TValue GetAttributeValue<TAttribute, TValue>(
        this Type type, 
        Func<TAttribute, TValue> valueSelector) 
        where TAttribute : Attribute
    {
        var att = type.GetCustomAttributes(
            typeof(TAttribute), true
        ).FirstOrDefault() as TAttribute;
        if (att != null)
        {
            return valueSelector(att);
        }
        return default(TValue);
    }
}

и использовать следующим образом:

string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);
217
ответ дан 24 November 2019 в 05:09
поделиться

Скорее затем напишите много кода, просто сделайте это:

{         
   dynamic tableNameAttribute = typeof(T).CustomAttributes.FirstOrDefault().ToString();
   dynamic tableName = tableNameAttribute.Substring(tableNameAttribute.LastIndexOf('.'), tableNameAttribute.LastIndexOf('\\'));    
}
0
ответ дан 24 November 2019 в 05:09
поделиться

Вот хороший учебник, если вы его раньше не видели http://msdn.microsoft.com/en-us/library/aa288454 (VS.71) .aspx

В частности, вас интересует раздел «Доступ к атрибуту» http://msdn.microsoft.com/en-us/library/aa288454 (VS.71) .aspx # vcwlkattributestutorialanchor3

2
ответ дан 24 November 2019 в 05:09
поделиться
System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);

for (int i = 0; i < attributes.Length; i++)
{
    if (attributes[i] is DomainNameAttribute)
    {
        System.Console.WriteLine(((DomainNameAttribute) attributes[i]).Name);
    }   
}
13
ответ дан 24 November 2019 в 05:09
поделиться
Другие вопросы по тегам:

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