关于泛型类型的澄清

时间:2009-12-03 17:39:47

标签: c# .net generics

鉴于下面的代码块(来源:http://www.asp.net/learn/mvc/tutorial-31-cs.aspx)...我收到此错误:使用泛型类型'System.Collections.Generic.List'需要'1'类型参数

我可以通过简单地将我的声明修改为:var groups = new List<string>();来解决这个问题。这只是示例代码中无效语法的情况吗?但是,我问这里,因为我不止一次遇到这个问题,并且想知道是否有某种VS.NET“严格性设置”可能在我的VS环境中起作用。

public class GroupController : Controller
{
    public ActionResult Index()
    {
        var groups = new List();
        return View(groups);
    }

    /// another example...
    Assert.IsInstanceOfType(result.ViewData.Model, typeof(IEnumerable));  // same error

    Assert.IsInstanceOfType(result.ViewData.Model, typeof(IEnumerable<string>)); // corrected

}

3 个答案:

答案 0 :(得分:1)

链接网页中出现错误。如果查看HTML源代码,可以看到泛型类型参数有一个参数:

namespace ContactManager.Controllers
{
    public class GroupController : Controller
    {
        public ActionResult Index()
        {
            var groups = new List<Group>();
            return View(groups);
        }

    }
}

同样适用于上面的例子(或者,在你的问题中,下面):

// Assert
Assert.IsInstanceOfType(result.ViewData.Model, typeof(IEnumerable<Group>));

答案 1 :(得分:1)

是的,这似乎是示例代码呈现为HTML

的方式中的错误

答案 2 :(得分:1)

是的,这是示例代码中呈现的无效语法。

增加混淆的一点是在代码中使用IEnumerableIEnumerable<string>。这没关系,因为IEnumerableIEnumerable<T> 不同类型。第一个是非通用的,第二个是通用的。

将其与List<T>进行比较 - 没有非通用List类型。 (最接近的等价物是ArrayList。)

相关问题