Как передать тип параметром функции c#?

209
07 декабря 2018, 10:40

Хочу написать функцию для упрощения получения GET реквестов между winforms и web_api.

Вот функция

public  RestResponse GetRest(string client_str,Type typ)
{
    var client = new RestClient(client_str);
    var request = new RestRequest(Method.GET);
    request.AddHeader("GET", "application/json");
    request.OnBeforeDeserialization = resp => { resp.Content = "application/json"; };
    return  client.Execute <typ>(request);
}

Но выдает ошибку, что typ переменная, а используется как тип.

Answer 1

Вы можете попробовать так

public RestResponse GetRest<T>(string client_str) where T : new()
{
    var client = new RestClient(client_str);
    var request = new RestRequest(Method.GET);
    request.AddHeader("GET", "application/json");
    request.OnBeforeDeserialization = resp => { resp.Content = "application/json"; };
    return client.Execute<T>(request);
}

Пример вызова

var result = GetRest<MyClass>(string client_str);

UPD

Два компилирующихся варианта:

Если надо вернуть только данные

public T GetRest<T>(string client_str) where T:new()
{
    var client = new RestClient(client_str);
    var request = new RestRequest(Method.GET);
    request.AddHeader("GET", "application/json");
    request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
    return client.Execute<T>(request).Data;
}

Если надо вернуть типизированный ответ

public IRestResponse<T> GetRest<T>(string client_str) where T : new()
{
    var client = new RestClient(client_str);
    var request = new RestRequest(Method.GET);
    request.AddHeader("GET", "application/json");
    request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };
    return client.Execute<T>(request);
}
READ ALSO
OnMouseDown не вызывается

OnMouseDown не вызывается

Нажимаю на обьект на который повешен скрипт, и ничего не происходитОбъект двумерный

113
Как в Regex в качества аргумента передать массив?

Как в Regex в качества аргумента передать массив?

Подскажите, как в Regex передать массив Я попытался, но компилятор выдает ошибку

206
IE расширение регистрация в windows

IE расширение регистрация в windows

Работаю с BHO IE на C#

180
Написать Linq-аналог запроса

Написать Linq-аналог запроса

Я хочу преобразовать этот SQL в LINQ, но сталкиваются с трудностями, может кто-нибудь мне помочь?

144