2017-04-19 66 views
2

我有一个方法的接口上的值:返回使通入一个模拟的方法

SomeClass的DoSomething的(SomeClass的任何);`

我不能做.Returns(x => x)因为错误的:

cannot convert lambda expression to type Someclass because it is not a delegate type.

任何想法?

+0

可能的重复[无法将lambda表达式转换为类型'string',因为它不是委托类型](http://stackoverflow.com/questions/19197481/cannot-convert-lambd a-expression-to-type-string-because-it-not-a-delegate -t​​) –

+0

使用适当的标签并且不包括它问题标题 – Rahul

回答

5

这些方法重载看看:

Returns(TResult value) 
Returns<T>(Func<T, TResult> valueFunction) 

这似乎很明显的你,C#编译器应该选择第二个重载。但实际上C#编译器无法从您传递的参数x => x推断通用参数T的类型。这就是为什么编译器选择非通用版本的方法并尝试将lambda转换为SomeClass的原因。

要解决此问题,您应该帮助编译器推断通用参数T的类型。您可以通过显式指定类型的委托参数的做到这一点:

.Returns((SomeClass x) => x); 

或者你可以指定T型手动

.Returns<SomeClass>(x => x) 
1

您可以创建someclass一个实例,并返回同样喜欢

someclass cl = new someclass 
{ 
//property initialization 
}; 

mockinstance.Setup(s => s.DoSomething(cl)).Returns(cl); 
相关问题