public static T Parse<T>(this NameValueCollection col, string key)
{
return (T)Convert.ChangeType(col[key], typeof(T));
}
я не совсем уверен в полях ChangeType или не (я предполагаю, что чтение документов сказало бы мне, но я тороплюсь прямо сейчас), но по крайней мере оно избавляется от всей той проверки типа. Упаковка наверху не очень высока, тем не менее, таким образом, я не волновался бы слишком много об этом. Если бы Вы волнуетесь по поводу непротиворечивости типа выполнения, я записал бы функцию как:
public static T Parse<T>(this NameValueCollection col, string key)
{
T value;
try
{
value = (T)Convert.ChangeType(col[key], typeof(T));
}
catch
{
value = default(T);
}
return value;
}
Этот способ, которым не будет бомбить функция, если значение не может быть преобразовано по любой причине. Это означает, конечно, что необходимо будет проверить возвращенное значение (который необходимо было бы сделать так или иначе, так как пользователь может отредактировать querystring).
Я согласился с предложением volkerK, а затем перешел на:
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx Та
Я нашел ссылку на CompositeCollection в другой статье SO: Merged ObservableCollection
Поскольку вы хотите создать Concat / Union, похоже, это именно то, что вам нужно. Жаль, что это не строго типизировано.