.Net假货 - 表达期限

时间:2013-10-06 09:01:03

标签: c# lambda expression microsoft-fakes

我使用VS2013为我的测试解决方案创建了一个假Dll(System.Web.Mvc),我使用以下语法来解析数据:

bool solved = helper.ViewData.ModelState.TryGetValue(key, out state);

我正在使用这个Shim(工作正常):

ShimModelStateDictionary.AllInstances.TryGetValueStringModelStateOut =
    delegate(ModelStateDictionary dictionary, string s, out ModelState @out)
    {
            @out = new ModelState();
           return true;
    };

但必须有一个替代解决方案,其中包含以下语法:

ShimModelStateDictionary.AllInstances.TryGetValueStringModelStateOut = (ModelStateDictionary dictionary, string s, out ModelState @out) => ...

但我不知道如何用Lambda Expression解决这个问题?我不知道它是如何工作的,也许有人可以给我一个提示或者可以告诉我这种语法是如何工作的。

1 个答案:

答案 0 :(得分:0)

基本上,您只需匹配方法签名即可。该方法采用字符串和输出变量,因此需要名称。然后你需要一个方法体(需要花括号,因为你需要两行),它分配out变量并返回正确的返回类型。我自己没有测试过这段代码,但我相信它会起作用。通常,我使用resharper来建议lambda,现在我对语法非常熟悉。

ShimModelStateDictionary
  .AllInstances
  .TryGetValueStringModelStateOut = 
    (s, out m) =>
      {
        m = new ModelState();
        return true;
      }

^应该是你需要的。