为什么我的C#模板方法抱怨接受特定类型?

时间:2010-09-30 01:51:58

标签: asp.net-mvc-2

我正在深入研究ASP.NET MVC 2,我正在阅读一篇教程,我在单元测试中遇到了与模板方法相关的错误。错误的代码是......

var displayedProducts = (IList<Product>)result.ViewData.Model;
displayedProducts.Count.ShouldEqual(2);

ShouldEqual的方法定义是......

public static void ShouldEqual<T>(this T actualValue, T expectedValue)
{
   Assert.AreEqual(expectedValue, actualValue);
}

,错误是......

'int' does not contain a definition for 'ShouldEqual' and no extension method 'ShouldEqual' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)

但是因为我对这一切都很陌生,所以我看不出我错过了什么。

  1. 有没有人看到这个问题?
  2. 有人可以向我解释ShouldEqual如何成为Count
  3. 的成员函数

    非常感谢你的帮助!如果需要更多代码,请告诉我。

2 个答案:

答案 0 :(得分:1)

ShouldEqual仅是编译器技巧。它是一个独立的函数(静态类(CLASSNAME)和方法)。编译器用...替换调用

CLASSNAME.ShouldEqual<int>(displayedProducts.Count, 2);

See here for more informationhttp://msdn.microsoft.com/en-us/library/bb383977.aspx

答案 1 :(得分:1)

我认识到这一点......这是史蒂夫桑德森的书吗?

如果我注释掉声明using的命名空间的ShouldEqual语句,我可以重现此错误。

在您拥有的文件中

var displayedProducts = (IList<Product>)result.ViewData.Model;
displayedProducts.Count.ShouldEqual(2);

您可以检查并确保using所在的命名空间有ShouldEqual语句吗?