Имея следующий код:Возврат функции делегата на основе типа
public delegate Task<bool> CreateObject<TU>
(TU obj, object parameters, Expression<Func<TU, object[]>> includes = null);
// This Version compile
public CreateObject<Dummy> Example1(Type listOfType)
{
CreateObject<Dummy> c = DummyRepository.InsertAsync;
return c;
}
// This Version do NOT compile
public CreateObject<TU> Example2<TU>(Type listOfType)
{
if (listOfType == typeof(Dummy)) return DummyRepository.InsertAsync;
if (listOfType == typeof(DummyName)) return DummyNameRepository.InsertAsync;
if (listOfType == typeof(DummyEntry)) return DummyEntryRepository.InsertAsync;
return null;
}
// This Version do NOT compile
public CreateObject<TU> Example3<TU>()
{
if (typeof(TU) == typeof(Dummy)) return DummyRepository.InsertAsync;
if (typeof(TU) == typeof(DummyName)) return DummyNameRepository.InsertAsync;
if (typeof(TU) == typeof(DummyEntry)) return DummyEntryRepository.InsertAsync;
return null;
}
Я пытаюсь вернуть метод (все доли подписи, основанной на Т), тем не менее, у меня возникли проблемы написания этого кода, кто-нибудь знает, как сделать это?
Раствор, мне нужно, должно быть основано на example2, где я использую тип listOfType
, и по этой причине я хотел бы избежать вызова метода Whith родового ТУ ...
Update: # 1
if (listOfType == typeof(Dummy)) return (CreateObject<object>)(object)(CreateObject<Dummy>)DummyRepository.InsertAsync;
Эта линия, компилируется, но не работает ...
Любые другие варианты? Какая у меня другая конструкция или решение?
Версии, которые не компилируются, не создают делегатов ... Первый из них будет потому, что вы явно создаете делегат. –
Вы не можете применять логику выполнения для генерических типов. – Ankur
@ Ankur Да, я понимаю, но какое другое решение я должен реализовать для цели? – Dryadwoods