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 в массиве.
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);
Скорее затем напишите много кода, просто сделайте это:
{
dynamic tableNameAttribute = typeof(T).CustomAttributes.FirstOrDefault().ToString();
dynamic tableName = tableNameAttribute.Substring(tableNameAttribute.LastIndexOf('.'), tableNameAttribute.LastIndexOf('\\'));
}
Вот хороший учебник, если вы его раньше не видели http://msdn.microsoft.com/en-us/library/aa288454 (VS.71) .aspx
В частности, вас интересует раздел «Доступ к атрибуту» http://msdn.microsoft.com/en-us/library/aa288454 (VS.71) .aspx # vcwlkattributestutorialanchor3
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);
}
}