在c#中测试对象是否实现给定接口的最简单方法是什么?(回答这个问题 在Java中)
当前回答
例如:
if (obj is IMyInterface) {}
本课程:
检查typeof(MyClass). getinterfaces()是否包含该接口。
其他回答
这应该可以工作:
MyInstace.GetType().GetInterfaces();
但也很好:
if (obj is IMyInterface)
甚至(不是很优雅):
if (obj.GetType() == typeof(IMyInterface))
如果你想在检查后使用类型转换对象: 从c# 7.0开始:
if (obj is IMyInterface myObj)
这和
IMyInterface myObj = obj as IMyInterface;
if (myObj != null)
参见.NET文档:模式匹配概述
我使用
断言。(myObject是ImyInterface);
在我的单元测试中测试myObject是一个实现了我的接口ImyInterface的对象。
最近我试着用安德鲁·凯南的答案,但出于某种原因,它对我不起作用。我使用了这个方法,并且它有效(注意:可能需要写入名称空间)。
if (typeof(someObject).GetInterface("MyNamespace.IMyInterface") != null)
例如:
if (obj is IMyInterface) {}
本课程:
检查typeof(MyClass). getinterfaces()是否包含该接口。
推荐文章
- LINQ读取XML
- 我怎么知道什么时候创建一个接口?
- 如何强制LINQ Sum()返回0而源集合是空的
- 将值附加到查询字符串
- 具有构造签名的接口如何工作?
- Selenium c# WebDriver:等待元素出现
- 我如何添加双引号的字符串,是在一个变量?
- 检查字符串是否包含字符串列表中的元素
- 最好的方法在asp.net强制https为整个网站?
- 将字符串转换为System.IO.Stream
- 如何从枚举中选择一个随机值?
- 驻留在App_Code中的类不可访问
- 在链式LINQ扩展方法调用中等价于'let'关键字的代码
- dynamic (c# 4)和var之间的区别是什么?
- Visual Studio: ContextSwitchDeadlock