Создать Generi c Class Accepting T как перечисление - PullRequest
0 голосов
/ 19 января 2020

У меня есть этот класс, и я хочу, чтобы он принял generi c в качестве enum, я могу вставить его в конструктор, но я хочу использовать generi c.

, это мой интерфейс:

public interface ITrnApi<TEnum> : IDisposable where TEnum : struct

и я хочу, чтобы мой класс был похож на этот

public class TrnApi<TEnum> : ITrnApi<TEnum> where TEnum : struct
{
    private readonly HttpClient _http;

    public TrnApi(HttpClient http, TEnum company)
    {
        _http = http;
        _http.BaseAddress = company.ToBaseUrl().ToUri();

        //public enum Company
        //{
        //    test = 1,
        //    othertest = 2
        //}
    }
}

, но получаю эту ошибку:

'TEnum' не содержит определения для «ToBaseUrl» и лучшая перегрузка метода расширения «Extentions.ToBaseUrl (Company, string)» требует получателя типа «Company»

Как я могу это сделать?

1 Ответ

2 голосов
/ 19 января 2020

Ограничение System.Enum доступно начиная с C# 7.3.

public class TrnApi<TEnum> : ITrnApi<TEnum> where TEnum : struct, Enum
{
    private readonly HttpClient _http;

    public TrnApi(HttpClient http, TEnum company)
    {
        _http = http;
        _http.BaseAddress = company.ToBaseUrl().ToUri();
        /* ... */
    }
}
...