Задайте себе вопрос: как T
и Type type
значимо различаются? Зачем вам оба?
Вы не.
Кроме того, хотя технически возможно проверить тип универсального параметра, вам не следует этого делать. Это кодовый запах. Если ваш метод универсален, тело метода также должно быть универсальным. Это включает в себя отсутствие необходимости знать точное значение T.
1. Избавиться от Type type
public static List<T> getValues<T>(string ColName)
{
//...
}
Обратите внимание, как будет использоваться этот метод:
List<DateTime> myDateList = getValues<DateTime>("MyDateTimeColumn");
2. Сделайте тело метода общим
public static List<T> getValues<T>(string ColName)
{
List<T> myReturnList = new List<T>();
var selectedColumnValues = db.AC_PROPERTY.Select(ColName);
//Query and add results to list.
return myReturnList;
}
Выглядит намного аккуратнее, не так ли? Я заметил, что вы пропустили фактическое создание списка; поэтому я тоже опустил это сейчас.
Я мог бы перейти к остальной части тела метода, основываясь на некоторых предположениях, но здесь есть гораздо более важное соображение.
Ваш метод, похоже, ничем не отличается от Метод LINQ's Select () !
Так что вместо того, чтобы делать это с помощью пользовательского метода getValues<T>
:
List<DateTime> myDateList = getValues<DateTime>("MyDateTimeColumn");
Вы можете использовать существующий метод LINQ:
List<DateTime> myDateList = myDataList.Select(item => item.MyDateTimeProperty).ToList();
(Примечание: ToList()
может быть необязательным, но рекомендуется из-за ленивой оценки).