假设我有一个名为 Data 的类。 另一个类使用某些属性注释其成员之一,类型为 data 。 例如:
public class Example{
[DefaultNameAttribute("default name")]
public Data Name{get;set}
}
我正在寻找的是从类 Data 中获取该属性及其包含的数据的方法。我希望能够编写以下代码:
public class Data{
private string _name = null;
public string Name{
get{
if (_name != null) return _name;
return (getDefaultNameFromAnnotation(this));//this is the method I'm looking for
}
}
换句话说,我希望能够使用我班级外指定的自定义属性为特定字段提供默认值。
答案 0 :(得分:0)
这将取决于您的属性的使用方式(如果它在类,属性,方法等...)。例如,如果它仅用于某个类,则可以使用以下代码获取所有使用您的属性标记的类型:
public IEnumerable<Type> GetTypes(Assembly assembly)
{
foreach(Type type in assembly.GetTypes())
{
if (type.GetCustomAttributes(typeof(DefaultNameAttribute), true).Length > 0)
{
yield return type;
}
}
}
如果它仅用于属性(作为示例),那么您可以嵌套一个额外的foreach
语句,该语句将枚举给定类型的所有属性并查找属性。
答案 1 :(得分:0)
简短回答:你不能,或者至少你不应该。
DefaultNameAttribute
适用于Example
类型的成员,该成员与Data
类型相关联。可能有多种类型使用Data
类型,以及DefaultNameAttribute
的多个实例。 Example
甚至可以在另一个程序集等中定义。