Получить тип из типа
От: Barbar1an Украина  
Дата: 09.10.23 10:28
Оценка:
Как автоматически получить тип ответа?

есть так
    public class SettingsCall : ApiCall
    {
    }

    public class SettingsResponse
    {
    }

    protected TResponse Call<TResponse>(ApiCall call) where Rp : class
    {
    }

    Call<SettingsResponse>(new SettingsCall{});


а хочется так
    public class SettingsCall : ApiCall
    {

        public class Response
        {
        }
    }

    // чтото типа такого - получить тип респонза както автоматически
    protected TCall.Response Call<TCall>(TCall call) where ....
    {
    }

    // чтобы потом
    Call(new SettingsCall{});
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Получить тип из типа
От: Chorkov Россия  
Дата: 09.10.23 12:00
Оценка: +1
Здравствуйте, Barbar1an, Вы писали:

Какой это язык программирования?
Re[2]: Получить тип из типа
От: Barbar1an Украина  
Дата: 09.10.23 13:00
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>Здравствуйте, Barbar1an, Вы писали:


C>Какой это язык программирования?


шарп
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Получить тип из типа
От: RushDevion Россия  
Дата: 09.10.23 13:53
Оценка: 82 (2)
Ну как-то придется связать request и response, иначе, имхо, не выйдет.
Типа того:
interface IApiRequest<TRequest, TResponse> { } // Marker interface

class SettingsRequest : IApiRequest<SettingsRequest, SettingsRequest.Response>
{
    public class Response
    {
    }
}

static class X
{
    public static TResponse Call<TRequest, TResponse>(IApiRequest<TRequest, TResponse> req)
    {
        // TODO: ...
        return default;
    }

    public static void DoCall()
    {
        var response = Call(new SettingsRequest());
    }
}
Re[2]: Получить тип из типа
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.10.23 02:19
Оценка: +1
Здравствуйте, RushDevion, Вы писали:

RD>Ну как-то придется связать request и response, иначе, имхо, не выйдет.

Всё верно.
RD>Типа того:
RD>
RD>interface IApiRequest<TRequest, TResponse> { } // Marker interface

RD>class SettingsRequest : IApiRequest<SettingsRequest, SettingsRequest.Response>
RD>{
RD>    public class Response
RD>    {
RD>    }
RD>}

RD>static class X
RD>{
RD>    public static TResponse Call<TRequest, TResponse>(IApiRequest<TRequest, TResponse> req)
RD>    {
RD>        // TODO: ...
RD>        return default;
RD>    }

RD>    public static void DoCall()
RD>    {
RD>        var response = Call(new SettingsRequest());
RD>    }
RD>}
RD>

Можно упростить — у вас TRequest нигде не используется.
interface IApiRequest<TResponse> { } // Marker interface

class SettingsRequest : IApiRequest<SettingsRequest.Response>
{
    public class Response
    {
    }
}

static class X
{
    public static TResponse Call<TResponse>(IApiRequest<TResponse> req)
    {
        // TODO: ...
        return default;
    }

    public static void DoCall()
    {
        var response = Call(new SettingsRequest());
    }
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Получить тип из типа
От: RushDevion Россия  
Дата: 10.10.23 15:55
Оценка:
S>Можно упростить — у вас TRequest нигде не используется.

Вообще да, но это на случай, если в Call<TResponse>(...) нужно знать TRequest, а GetType() для этого не подходит.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.