如何确定是否系统.对象是System.Type

本文关键字:System Type 对象 系统 何确定 是否 | 更新日期: 2023-09-27 17:52:17

我正在为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方法来确定类是否实现接口或继承基对象?

如果我错过了一些非常明显的东西,我很抱歉,但我还是很感激你的帮助:)

如何确定是否系统.对象是System.Type

使用类型。IsAssignableFrom方法。

的例子:

type.IsAssignableFrom(value.GetType());

也许您正在寻找is ?

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

你也可以试试

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

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

if (mac is IAwesome) {}

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

bool isAwesome = mac is IAwesome;

检查一个类是否实现了一个接口:

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

简单的实现方法是

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