2017-08-31 23 views
1

我想了解反射機制。 我想比較一個對象的屬性與給定的值。 現在,我希望能夠知道(當然在運行時)兩個對象是否可比較,而不是執行比較並捕獲異常。c#在運行時檢查兩個對象是否具有可比性

喜歡的東西:

public bool IsComparableWithProperty(string propertyName, object value) 
{ 
    return typeof(MyType).GetProperty(propertyName).PropertyType is IComparable<value.GetType()>   
} 

當然,我知道這是不是有效,仿製藥必須在編譯時是已知的。 我想知道這種行爲是否可以在C#中實現。

感謝

回答

3

您可以使用MakeGenericType與值運行時類型實例化通用的接口定義和使用IsAssignableFrom檢查兼容性。

public bool IsComparableWithProperty(string propertyName, object value) 
{ 
    return typeof(IComparable<>).MakeGenericType(value.GetType()).IsAssignableFrom(typeof(MyType).GetProperty(propertyName).PropertyType); 
} 
+0

如果我反其道而行,可能會得到不同的結果嗎? 這可能是假的嗎? (IComparable <>)。MakeGenericType(o1.GetType())。IsAssignableFrom(o2.GetType())== typeof(IComparable <>)。MakeGenericType(o2.GetType())。IsAssignableFrom(o1.GetType() ))' – AFusco

+0

我不確定比較有多大意義..你正在比較'T2 is ICoamparable 'to'T1 is IComparable '... –

+0

對於方法中返回true的表達式,屬性類型會有ti是實施'IComparable '的東西 –

相關問題