在c#中测试对象是否实现给定接口的最简单方法是什么?(回答这个问题 在Java中)
当前回答
例如:
if (obj is IMyInterface) {}
本课程:
检查typeof(MyClass). getinterfaces()是否包含该接口。
其他回答
这篇文章是一个很好的答案。
public interface IMyInterface {}
public class MyType : IMyInterface {}
这是一个简单的例子:
typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
or
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))
if (object is IBlah)
or
IBlah myTest = originalObject as IBlah
if (myTest != null)
例如:
if (obj is IMyInterface) {}
本课程:
检查typeof(MyClass). getinterfaces()是否包含该接口。
我有这样一种情况,我把一个变量传递给一个方法,不确定它是一个接口还是一个对象。
目标是:
如果item是一个接口,则基于该接口实例化一个对象,该接口是构造函数调用中的参数。 如果项目是一个对象,返回null,因为构造函数为我的调用期望一个接口,我不希望代码坦克。
我通过以下方法做到了这一点:
if(!typeof(T).IsClass)
{
// If your constructor needs arguments...
object[] args = new object[] { my_constructor_param };
return (T)Activator.CreateInstance(typeof(T), args, null);
}
else
return default(T);
这应该可以工作:
MyInstace.GetType().GetInterfaces();
但也很好:
if (obj is IMyInterface)
甚至(不是很优雅):
if (obj.GetType() == typeof(IMyInterface))
推荐文章
- .NET中的Map和Reduce
- 我如何能使一个组合框不可编辑的。net ?
- .NET反射的成本有多高?
- 实体框架回滚并移除不良迁移
- 将流转换为字符串并返回
- 在c#中检查字符串是否只包含数字的最快方法
- IEquatable和重写Object.Equals()之间的区别是什么?
- 创建一个堆栈大小为默认值50倍的线程有什么危险?
- 转换JSON字符串到JSON对象c#
- 显示两个datetime值之间的小时差值
- 如何设置enum为空
- 选择Enum类型的默认值而无需更改值
- 我如何设置在一个组合框中选择的项目,以匹配我的字符串使用c# ?
- String与StringBuilder
- 如何在ASP中使用ILogger进行单元测试。网络核心