C# 将最小起订量时间与?:运算符一起使用时出错

C# 将最小起订量时间与?:运算符一起使用时出错,c#,mocking,operators,C#,Mocking,Operators,我尝试使用Moq框架测试我的代码,我想验证在某些特殊情况下是否调用了我的方法。为此,我必须使用Mock.Times。如果我使用像这样的时间,它可以正常工作 MockObject.Verify(x => x.SomeMethod(), Times.Once) 但是因为我有很多方法要检查,所以我想这样使用它: System.Func<Times> times = isItCalled ? Times.Once : Times.Never; MockObject.Verify(x

我尝试使用Moq框架测试我的代码,我想验证在某些特殊情况下是否调用了我的方法。为此,我必须使用Mock.Times。如果我使用像这样的时间,它可以正常工作

MockObject.Verify(x => x.SomeMethod(), Times.Once)
但是因为我有很多方法要检查,所以我想这样使用它:

System.Func<Times> times = isItCalled ? Times.Once : Times.Never;
MockObject.Verify(x => x.SomeMethod(), times)
System.Func times=isItCalled?时代。一次:时代。永不;
验证(x=>x.SomeMethod(),次)
为此,我收到以下错误消息: 无法确定条件表达式的类型,因为“方法组”和“方法组”之间没有隐式转换。

这对我来说真的很奇怪,因为我认为这个操作符与下面的操作符相同(也可以正常工作):

System.Func时代;
如果(ISITCALL)
{
次=次。一次;
}
其他的
{
时代=时代。永不;
}
验证(x=>x.SomeMethod(),次)

这是三元运算符的已知问题

一种可能的解决办法:

Func<Times> times = isItCalled ? (Func<Times>)Times.Once : Times.Never;
MockObject.Verify(x => x.SomeMethod(), times);

你能试试这个:
System.Func times=isItCalled吗?((System.Func)Times.one):Times.Never非常感谢!!它起作用了!但是你能解释一下为什么这个明确的演员阵容是必要的吗?
Func<Times> times = isItCalled ? (Func<Times>)Times.Once : Times.Never;
MockObject.Verify(x => x.SomeMethod(), times);
// note the parentheses so you pass a Time instance instead of a delegate:
MockObject.Verify(x => x.SomeMethod(), isItCalled ? Times.Once() : Times.Never());