[c#] 如何使用反射確定屬性類型?


Answers

好吧,也許我錯過了一些愚蠢的東西,但不應該是:

if ( pi.PropertyType == typeof(MyType ))

???

Question

我如何測試類型的屬性以查看它是否是指定的類型?

編輯:我的目標是檢查程序集,以查看該程序集中的任何類型是否包含MyType屬性(或從MyType繼承)。

這是我走下去的賽道......

AssemblyName n = new AssemblyName();
n.CodeBase = "file://" + dllName;
Assembly a = AppDomain.CurrentDomain.Load(n);

foreach (Type t in a.GetTypes())
    foreach (PropertyInfo pi in t.GetProperties())
        if ( pi.PropertyType is MyType ) // warning CS0184
            Console.WriteLine("Found a property that is MyType");

這會編譯警告CS0184:給定的表達式永遠不會是提供的('MyType')類型




這是捷徑

property.PropertyType.IsGenericType && (typeof(ICollection<>).IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition()))
&& typeof(<YourType>).IsAssignableFrom(property.PropertyType.GenericTypeArguments[0])



來自其他類似問題的這個例子簡化了對我的理解

If p.PropertyType Is GetType(String) Then




您正在尋找:

if (typeof(mi) is MyType) { ... }

對 ?






Links