Общие предупреждения Предупреждение 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>()
. Когда вы ставите это общее определение, вы говорите, что оно специфично для этого метода, а не для всего класса.