#.net #custom-attributes #typedescriptor
#.net #пользовательские атрибуты #typedescriptor
Вопрос:
Я создал свой собственный атрибут для украшения своего объекта.
[AttributeUsage(AttributeTargets.All)]
public class MyCustomAttribute : System.Attribute { }
Когда я пытаюсь использовать TypeDescriptor.GetProperties, передаваемый в моем пользовательском атрибуте, ничего не возвращает, даже если тип украшен атрибутом.
var props = TypeDescriptor.GetProperties(
type,
new[] { new Attributes.FlatLoopValueInjection()});
Как мне получить TypeDescriptor.Получить свойства для распознавания моих пользовательских типов?
Ответ №1:
Тип.Метод GetProperties(type, Attributes[]) возвращает только набор свойств для указанного типа компонента, используя указанный массив атрибутов в качестве фильтра.
Вы уверены, что целевой тип имеет свойства, отмеченные вашими пользовательскими атрибутами, например, так?
//...
var props = TypeDescriptor.GetProperties(typeof(Person), new Attribute[] { new NoteAttribute() });
PropertyDescriptor nameProperty = props["Name"];
}
//...
class Person {
[Note]
public string Name { get; set; }
}
//...
class NoteAttribute : Attribute {
/* implementation */
}
Ответ №2:
обновлено, чтобы получить атрибут свойства
этот код был скопирован и вставлен из MSDN, что стало первым результатом поиска Google «get customattribute reflection c #«
using System;
public class ExampleAttribute : Attribute
{
private string stringVal;
public ExampleAttribute()
{
stringVal = "This is the default string.";
}
public string StringValue
{
get { return stringVal; }
set { stringVal = value; }
}
}
[Example(StringValue="This is a string.")]
class Class1
{
public static void Main()
{
PropertyInfo propertyInfo = typeof (Class1).GetProperties().Where(p => p.Name == "Foo").FirstOrDefault();
foreach (object attrib in propertyInfo.GetCustomAttributes(true))
{
Console.WriteLine(attrib);
}
}
[Example(StringValue = "property attribute")]
public string Foo {get;set;}
}
Комментарии:
1. Не мое, но я думаю, что он пытается получить доступ к атрибутам свойств, а не к самим классам.
2.
TypeDescriptor
можно ввести свойства позже. Это похоже на расширяемую версию Reflection . ЕслиTypeDescriptor
это то, что нужно OP, то этот ответ неверен.