鉴于以下内容
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'
我不确定这个问题到底是什么,为什么我的返回类型与我告诉类的类型相同。我在这里错过了什么吗?
答案 0 :(得分:25)
您可以在Get方法的声明中省略&lt; T&gt; 。您没有为&lt; T&gt; 所说的Get方法引入新的Type参数。您返回 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)
{
}
}
答案 1 :(得分:8)
你想要这个:
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>()
。当您放置该通用定义时,您说它是特定于该方法,而不是整个类。