Это больше вопрос относительно дженериков, чем дозвуковых:
Представьте, если у вас есть следующий код:
List<int> result =
DB.Select(Product.Columns.Id)
.From<Product>()
.ExecuteTypedList<int>();
Это прекрасно работает и возвращает общий список с идентификаторами из моей таблицы Product.
Но если я хочу получить список ProductName:
List<String> result =
DB.Select(Product.Columns.ProductName)
.From<Product>()
.ExecuteTypedList<String>();
выдает сообщение компилятора (перевод с немецкого):
«строка» должна быть неабстрактного типа
с публичным конструктором без
параметр, чтобы использоваться в качестве
универсальный тип или в универсальном методе
"SubSonic.SqlQuery.ExecuteTypedList ()"
в качестве параметра "Т".
причина: в строке нет пустого конструктора:
int i = new int; // works
String s = new String; // compiler error: "string" does not contain a constructor that takes '0' argument
Если я использую List<Object>
, вместо этого он работает , но есть ли более элегантный способ, где я могу использовать List<String>
?
Обновление: List<Object>
не работает. Я действительно получаю список объектов, но это «пустой» объект, который не содержит мои ProductNames (object.ToString () возвращает {Object}
)