Функция, принимающая разные типы параметров, но с той же логикойC#

Место общения программистов C#
Ответить
Anonymous
 Функция, принимающая разные типы параметров, но с той же логикой

Сообщение Anonymous »

У меня есть метод с подписью ниже. здесь UserSettingType является перечислением

Код: Выделить всё

public async Task Foo(string Id, IList inputSettingsTypes1, Func invokeBackEndFn)
{
T resultfromService1 = await invokeBackEndFn(service1);
T resultfromService2 = await GetResultFromService2(invokeBackEndFn, Id, inputSettingsTypes1);
T mergedResult = MergeResult(resultfromService1, resultfromService2, Id);
return mergedResult;
}
Теперь мне нужно распространить ту же логику на другой тип Enum

Код: Выделить всё

public async Task Foo(string Id, IList inputSettingsTypes2, Func invokeBackEndFn)
{
T resultfromService1 = await invokeBackEndFn(service1);
T resultfromService2 = await GetResultFromService2(invokeBackEndFn, Id, inputSettingsTypes2);
T mergedResult = MergeResult(resultfromService1, resultfromService2, Id);
return mergedResult;
}

Код: Выделить всё

TeamsSettingType
также является Enum без какой-либо иерархии наследования с UserSettingType.
В настоящее время я создал метод Overloaded Foo, чтобы принимать разные типы параметров, и продублировал логику и реорганизовал логику, не связанную с типом, в общий метод. поэтому оба метода Foo могут использовать их повторно.

Код: Выделить всё

public enum UserSettingType
{
Meeting,
Permission
// few other values
}
public enum TeamsSettingType
{
MeetingPolicy,
PermissionPolicy
// few other values
}
Моя логика основана на проверке значения в переданном списке перечислений и выполнении внутреннего вызова с переданным в InvokeBackendFn делегатом.
например:

Код: Выделить всё

if(UserSettingType.Contains(UserSettingType.Permission))
invokeBackendFn(MyService2);

if(UserSettingType.Contains(TeamsSettingType.PermissionPolicy))
invokeBackendFn(MyService2);
Как видите, мне нужно проверить разрешение в UserSettingType, в то время как мне нужно проверить PermissionPolicy в TeamsSettingType, чтобы выполнить тот же внутренний код.
Однако , это выглядит некрасиво, я хочу понять, есть ли лучший способ справиться с такими сценариями с помощью некоторых шаблонов проектирования на C#.

Подробнее здесь: https://stackoverflow.com/questions/789 ... same-logic
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»