如何获得给出其属性的类名

时间:2011-10-12 07:00:07

标签: c# reflection attributes

是否可以根据其属性的名称获取类名。如果是的话怎么样?任何人都可以帮助我。

4 个答案:

答案 0 :(得分:2)

我不认为这是直接可能的。您必须通过反射搜索所有类,并且您必须在每个类中查找该特定属性

答案 1 :(得分:2)

如果您有PropertyInfo,则可以使用DeclaringType属性。如果你只有一些字符串,你就无法从中得到很多。您必须首先获得该物业,但要获得该物业,您首先需要获得申报类,因此您已经知道申报类。

答案 2 :(得分:1)

反思是个好主意尝试阅读位于MSDN.com http://msdn.microsoft.com/en-us/library/ms173183(VS.80).aspx

的这篇文章

答案 3 :(得分:0)

以下是mscorlib.dll的示例。它找到所有具有名为“Capacity”的属性的类。

Assembly asm = Assembly.Load("mscorlib.dll");
foreach (Type type in asm.GetTypes())
{
    foreach (MemberInfo mem in type.GetMembers())
    {
        if ((mem.MemberType == MemberTypes.Property) && (mem.Name == "Capacity"))
            Console.WriteLine(type);
    }
}

或者,使用LINQ:

var asm = Assembly.Load("mscorlib.dll");
foreach (var type in from type in asm.GetTypes()
                     from mem in type.GetMembers()
                     where (mem.MemberType == MemberTypes.Property) &&
                        (mem.Name == "Capacity")
                     select type)
    Console.WriteLine(type);

这是输出:

System.Text.StringBuilder
System.Collections.CollectionBase
System.Collections.ArrayList
System.Collections.ArrayList+IListWrapper
System.Collections.ArrayList+SyncArrayList
System.Collections.ArrayList+FixedSizeArrayList
System.Collections.ArrayList+ReadOnlyArrayList
System.Collections.ArrayList+Range
System.Collections.SortedList
System.Collections.SortedList+SyncSortedList
System.Collections.Generic.List`1[T]
System.IO.MemoryStream
System.IO.UnmanagedMemoryStream
System.IO.PinnedBufferMemoryStream
System.IO.UnmanagedMemoryAccessor
System.IO.UnmanagedMemoryStreamWrapper