在c#中测试对象是否实现给定接口的最简单方法是什么?(回答这个问题 在Java中)


当前回答

我通过使用is关键字实现了这一点。

但是我也需要一个新的对象来使用接口属性。 要实现这一点,您需要在Interface之后添加新变量。

objectToCheck is Interface newVariableWithInterfaceProperties

.

 public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken,
            RequestHandlerDelegate<TResponse> next)
        {
            if (request is ICacheableQuery cachableRequest)
            {
             // here cachableRequest now has the interface properties.
             }
        }

其他回答

if (object is IBlah)

or

IBlah myTest = originalObject as IBlah

if (myTest != null)

我通过使用is关键字实现了这一点。

但是我也需要一个新的对象来使用接口属性。 要实现这一点,您需要在Interface之后添加新变量。

objectToCheck is Interface newVariableWithInterfaceProperties

.

 public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken,
            RequestHandlerDelegate<TResponse> next)
        {
            if (request is ICacheableQuery cachableRequest)
            {
             // here cachableRequest now has the interface properties.
             }
        }

对我有用的是:

断言。IsNotNull (typeof (YourClass) .GetInterfaces()。(i => i == typeof (ISomeInterface)));

如果你想在检查后使用类型转换对象: 从c# 7.0开始:

if (obj is IMyInterface myObj)

这和

IMyInterface myObj = obj as IMyInterface;
if (myObj != null)

参见.NET文档:模式匹配概述

我使用

断言。(myObject是ImyInterface);

在我的单元测试中测试myObject是一个实现了我的接口ImyInterface的对象。