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

3

我正在为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个回答

3

2
也许你在寻找“is”?
var stream = new FileStream();
bool isStream = stream is Stream;

你可以尝试一下,也可以试试:
isStream = typeOf(Stream).IsAssignableFrom(stream.GetType());

1

如果我理解正确,您正在寻找这个:

if (mac is IAwesome) {}

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


呵呵,大家都争着回答相同的答案 :) - Peter
如果查看“CompareToType”方法的签名,则无法使用“is”。 - Pavlo Glazkov

0
bool isAwesome = mac is IAwesome;

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());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接