2013-10-06 24 views
0

我创建了一个假的DLL(System.Web.Mvc)与VS2013对我的测试解决方案,我用下面的语法解析数据为:净假货 - 表达期限

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

我现在用这个垫片(即正常工作):

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解决这个问题?我不知道这是如何工作的,也许有人可以给我一个提示,或者可以告诉我这个语法是如何工作的。

回答

0

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

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

^应该正是你所需要的。