Общие предупреждения Предупреждение T имеет то же имя, что и тип другого типа

Учитывая следующее

public class Service<T> : IService<T>
{
        Repository<T> _repository = new Repository<T>();
        public T Get<T>(int id)
        {
            return _repository.Get<T>(id);
        }
}
public interface IService<T>
{
        T Get<T>(int id);
}

Я получаю следующее предупреждение

Параметр типа T имеет одно и то же имя как параметр типа из внешнего типа 'Services.IService'

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

Ответы

Ответ 1

Вы можете оставить <T> в объявлении методов Get. Вы не вводите новый параметр типа для метода Get, который <T> говорит. Тот факт, что вы возвращаете T, достаточно.

Я думаю, что это сработает:

public class Service<T> : IService<T>
{
    Repository<T> _repository = new Repository<T>();
    public T Get(int id)
    {
        return _repository.Get(id);
    }
}
public interface IService<T>
{
    T Get(int id);
}

Вы можете создать общий метод как в родовых, так и в не общих классах.

public class Foo
{
    public T Get<T>(int a)
    {
    }
}

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

public class Foo<T>
{
    public S Get<S>(int a)
    {
    }
}

Ответ 2

Вместо этого вы хотите:

public class Service<T> : IService<T>
{
        Repository<T> _repository = new Repository<T>();
        public T Get(int id)
        {
            return _repository.Get<T>(id);
        }
}

public interface IService<T>
{
        T Get(int id);
}

В основном в коде вы пытаетесь определить Get<T>(). Когда вы ставите это общее определение, вы говорите, что оно специфично для этого метода, а не для всего класса.