Допустим, у меня есть URL-адрес, который выглядит следующим образом: www.myhost.com/mypage?color=blue
В Asp.Net Core я ожидаю получить значение параметра цветового запроса, выполнив следующие действия:
string color = Request.Query["color"];
Но оказывается, что Request.Query["color"] возвращает значение типа StringValues, а не string. Почему это так?
Очевидно, тип StringValues может содержать массив строк и включает поддержку неявного преобразования в string[], что здорово, но зачем это нужно для значения параметра запроса? 
Необходимость получить такое значение кажется странным:
string color = Request.Query["color"].ToString();
И что еще хуже, проверка значения, чтобы определить, задан ли параметр запроса, больше не может быть выполнена так
  if(Request.Query["color"] == null) { 
      //param was not specified
  }
но вместо этого нужно проверить, как это так
 if(Request.Query["color"].Count == 0) { 
      //param was not specified
 }
Поскольку один параметр запроса не может иметь несколько значений (насколько я знаю), почему Request.Query["color"] возвращает объект StringValues, а не строку?