如何确定System.Object是否为System.Type

时间:2011-04-20 09:54:39

标签: c# wpf

我正在为WPF编写一个通用的IValueConverter,并且我正在努力将值与特定类型进行比较。

我的物体构成看起来像这样

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方法以确定该类是实现接口还是从基础对象继承?

道歉,如果我错过了一些令人目眩的明显,但我还是会感激一些帮助:)

6 个答案:

答案 0 :(得分:3)

使用Type.IsAssignableFrom方法。

示例:

type.IsAssignableFrom(value.GetType());

答案 1 :(得分:2)

也许您正在寻找is

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

您也可以尝试

isStream = typeOf(Stream).IsAssignableFrom(stream.GetType());

答案 2 :(得分:1)

如果我理解正确,你正在寻找:

if (mac is IAwesome) {}

或者:     var t = mac as IAwesome;     if(t!= null){}

答案 3 :(得分:0)

bool isAwesome = mac is IAwesome;

答案 4 :(得分:0)

检查类是否实现了接口:

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

or

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

答案 5 :(得分:0)

易于实施

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