Generi c class или generi c method? Какая хорошая практика? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть 3 разных класса:

class A
{
  public int property1;
  public int property2;
  // so on..
}

class B
{
  public int property11;
  public int property22;
  //so on.
}

class Consumer
{
  public int property111;
  public int property222;
  //so on.
}

// Business logic in other class
if (someCondition)
{
    var serviceCall1 = GetValuesForClassA();
    A obj = serviceCall.Response;
}

else if (someOtherCondition)
{
    var serviceCall2 = GetValuesForClassB();
    B obj = serviceCall2.Response;
}

После того, как я получу значения определенного типа, я назначаю его свойствам типа Consumer с помощью функции generi c, как показано ниже:

private void ApplyProperties<T>(T serviceResponse, Consumer obj)
 where T: class
{
    if (serviceResponse.GetType().Name == "A") // where A = class name
    {
        A newObj = (A)(object)serviceResponse;

        //Assign properties of Consumer obj here.
    }
    else if(serviceResponse.GetType().Name == "B") // where B = class name
    {
        B newObj = (B)(object)serviceResponse;

        //Assign properties of Consumer obj here.
    }
}

Я последовал этому примеру. Я не понимал, как изменить код более чистым способом, отсюда и вопрос.

1 Ответ

0 голосов
/ 16 июня 2020

Вы можете использовать сопоставление с образцом

        if (serviceResponse is A newObj) // where A = class name
        {
            //Assign properties of Consumer obj here.
        }

https://docs.microsoft.com/en-us/dotnet/csharp/pattern-matching

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...