获取属性分配到的类的名称

问题描述 投票:0回答:1

是否可以获得属性分配到的类的名称?

目前我有类似的东西,但模式是相同的。所以我想避免使用文字并从类名中获取 。

[Foo("BAR")]
public class BarData
{
}
c# reflection attributes
1个回答
0
投票

这个问题对我来说不是很清楚,所以我会尽力回答。让我们假设我们有以下

NameAttribute

[AttributeUsage(AttributeTargets.Class)]
public class NameAttribute(string input) : Attribute {
    public string Input { get; } = input;
}

[Name("Something1")]
public class Class1 { }

[Name("Something2")]
public class Class2 { }

以下是获取所有类型的方法。

// This set will contain all the types 
var set = new HashSet<Type>();
// Get all the assemblies in the current AppDomain
var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
// Select all types from all assemblies
foreach (var type in allAssemblies.SelectMany(a => a.GetTypes())) {
    var nameAttr = type.GetCustomAttribute<NameAttribute>();
    // If it has attrbiute add to the set
    if (nameAttr != null) {
        set.Add(type);
    }
}
        
// Print out all the names
foreach (var type in set) {
    Console.WriteLine($"ClassName:{type}");
}
© www.soinside.com 2019 - 2024. All rights reserved.