Я обнаружил, что есть два сценария, в которых мне нужно использовать дженерики в определении метода.
Первое, когда возвращаемое значение должно быть указано значением универсального типа. Так что когда это похоже:
public T Method1<T>(object someobject) where T:IBar;
Второй сценарий - это когда вам нужно использовать параметр типа (а не только интерфейс) внутри метода.
Примером обоих требований является метод GetModelByKey () в классе ViewModelFactory. Этот класс кэширует ViewModels с помощью ViewModelType и KeyType, и результирующий метод выглядит следующим образом:
public ViewModelType GetViewModelByKey<ViewModelType, KeyType>(KeyType key)
where ViewModelType : ViewModelBase, new()
{
IDictionary dictionary;
var type = typeof(ViewModelType);
if (!keyedViewModelDictionaries.TryGetValue(type, out dictionary))
{
dictionary = new Dictionary<KeyType, ViewModelType>();
keyedViewModelDictionaries.Add(type, dictionary);
}
var viewModels = (Dictionary<KeyType, ViewModelType>)dictionary;
ViewModelType vm;
if (!viewModels.TryGetValue(key, out vm))
{
vm = new ViewModelType();
vm.Initialize(this);
viewModels.Add(key, vm);
}
return vm;
}