我正在为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方法以确定该类是实现接口还是从基础对象继承?
道歉,如果我错过了一些令人目眩的明显,但我还是会感激一些帮助:)
答案 0 :(得分:3)
答案 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());
}