繁体   English   中英

无法使用Lambda表达式设置带有out参数的函数

[英]Cannot setup the function with out parameter using lambda expression

我发现了很多关于错误消息的问题,但没有一个与我的具体情况相符。

我在缓存实现中有一个带有此签名的方法:

public bool TryGet(TKey key, out TValue returnVal, Func<TKey, TValue> externalFunc = null)

我有一个继承自TKey的类:CompositeKey和TValue:字符串。

我正在尝试模拟它进行这样的单元测试:

_cacheMock
    .Setup(x => x.TryGet(It.IsAny<CompositeKey>(), out It.Ref<string>.IsAny, It.IsAny<Func<CompositeKey, string>>()))
    .Returns((CompositeKey key, out string s, Func<CompositeKey, string> fetchOne) => { s = ""; return true; });

我收到.Returns行的编译错误:

“无法将lambda表达式转换为类型'bool',因为它不是委托类型”

如果我删除“ out”修饰符,它将编译确定-但当然与调用的签名不匹配,并且我无法获得out值。

有没有办法在不修改TryGet()方法本身的情况下修复语句的Return()部分?

这可能对您有用:

//define the callback delegate
delegate void TryGetCallback(CompositeKey key, out string str, Func<CompositeKey, string> func);

mock.Setup(x => x.TryGet(
        It.IsAny<CompositeKey>(), 
        out It.Ref<string>.IsAny, 
        It.IsAny<Func<CompositeKey, string>>()))
    .Callback(new TryGetCallback((CompositeKey key, out string str, Func<CompositeKey, string>  func) => 
    { 
        str = "foo bar"; 
    }))
    .Returns(true);

通过这样的设置,您可以存档所需的内容

string actualValue;
bool result = mock.Object.TryGet(new CompositeKey(), out actualValue)
//actualValue = "foo bar", result = true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM