Как вернуть тип T или нуль в методе? - PullRequest
0 голосов
/ 15 марта 2020

Мне нужен метод, который возвращает класс с неопределенным типом или нулем.

Мне нужно это для обработки запросов API, например, я запрашиваю файл, скажем, изображение и другой файл, например видео и мне нужны разные типы для этого. Если изображение / видео не найдено, я хочу вернуть ноль.

Я уже пробовал Nullables, но, вероятно, я делаю это неправильно.

T? SendRequest<T?>(string pathOnServer)
{
    HttpResponseMessage response = SendTheRequest(pathOnServer);
    if(response.IsSuccessStatusCode)
        return JsonConvert.DeserializeObject<T>(response.Content.ReadAsStringAsync().Result);
    else
        return null;
}

Ответы [ 3 ]

3 голосов
/ 15 марта 2020

Если вы не хотите ограничивать T как struct или class. Вы можете попробовать

return default;

. Это вернет ноль, если T - строка или любые ссылочные типы.

1 голос
/ 15 марта 2020

Вы можете просто использовать where T : class

T SendRequest<T>(string pathOnServer) where T : class
        {
            HttpResponseMessage response = SendTheRequest(pathOnServer);
            if (response.IsSuccessStatusCode)
                return JsonConvert.DeserializeObject<T>(response.Content.ReadAsStringAsync().Result);
            else
                return null;
        }
0 голосов
/ 15 марта 2020

Это просто.

Вам просто нужно ограничить метод тем, что, как вы говорите, должно возвращаться.

возвращает класс с неопределенным типом или null.

То есть T SendReuest<T> (string pathOnServer) where T : class

Поскольку классы автоматически могут быть обнуляемыми , это все, что необходимо. Вам просто нужно ограничить T , чтобы быть КЛАСС - ничего.

...