2011-04-20 68 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()); 
}