2011-04-20 70 views
3

我正在爲WPF編寫一個通用的IValueConverter,並且我正在將這個值與特定類型進行比較。如何確定System.Object是否是System.Type

我的物體在像這樣

public interface IAwesome 
{ 
    int AwesomeAmount { get; set; } 
} 

public class MyAwesomeClass : IAwesome 
{ 
    public int AwesomeAmount { get; set; } 
} 

我的方法的妝看起來是這樣的

public bool CompareToType(object value, Type type); 

如果我有...

var mac = new MyAwesomeClass(); 
bool isAwesome = CompareToType(mac, typeof(IAwesome)); 

同樣我可以寫

var stream = new FileStream(); 
bool isStream = CompareToType(stream, typeof(Stream)); 

如何編寫我的CompareToType方法來確定類是實現接口還是繼承自基礎對象?

道歉,如果我失去了somethign言自明,但我無論如何得到一些幫助:)

回答

3

使用Type.IsAssignableFrom方法。

例子:

type.IsAssignableFrom(value.GetType()); 
+0

這個工作過程描述非常感謝你。 – mortware 2011-04-20 10:12:30

2

也許你正在尋找is

var stream = new FileStream(); 
bool isStream = stream is Stream; 

,你也可以嘗試

isStream = typeOf(Stream).IsAssignableFrom(stream.GetType()); 
0
bool isAwesome = mac is IAwesome; 
0

如果我理解正確的話,你在尋找這樣的:

if (mac is IAwesome) {} 

或者: 變種T = MAC爲IAwesome; 如果(T!= NULL){}

+0

嘿嘿,大家都衝着相同的答案:) – Peter 2011-04-20 10:00:40

+0

如果你看'CompareToType'方法的簽名,就不可能使用'is' – 2011-04-20 10:06:01

0

要檢查如果一個類實現一個接口:

var obj = new MyInteracedClass(); 
typeof(IMyInterface).IsAssignableFrom(obj.GetType()); 

or 

typeof(IMyInterface).IsAssignableFrom(typeof(MyInteracedClass)); 
0

最簡單的實現是

public bool CompareToType(object obj, Type type) 
{ 
    return type != null 
     && obj != null 
     && type.IsAssignableFrom(obj.GetType()); 
}