2009-12-03 8 views
2

Учитывая блок кода ниже (источник: 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 

} 

ответ

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>)); 
+0

Firebug не показал мне это! ; p – leppie

1

Да, это, кажется, ошибка в способе визуализации кода кода в HTML

1

Да, это недопустимый синтаксис в примере кода, который отображается.

Одним из пунктов, который добавляет путаницу, является использование как IEnumerable, так и IEnumerable<string> в коде. Это нормально, потому что IEnumerable и IEnumerable<T> являются различных типов. Первый - неродственный, второй - общий.

Сравните это с List<T> - нет нежизнеспособного типа List. (Ближайший эквивалент ArrayList.)

+0

Благодаря всем быстрым ответам! Я должен уточнить, что эти две строки IEnumerable - это те, которые я добавил для краткости. – Clay

Смежные вопросы