0

我已经为我的测试解决方案创建了一个带有 VS2013 的 Fake 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 表达式解决这个问题?我不确定它是如何工作的,也许有人可以给我一个提示或者告诉我这个语法是如何工作的。

4

1 回答 1

0

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

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

^应该正是你所需要的。

于 2013-10-08T23:05:45.367 回答