鉴于以下内容
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);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下警告
类型参数"T"与外部类型"Services.IService"中的类型参数同名
我不确定这个问题是什么,为什么我关心我的返回类型是否与我告诉类的类型相同.我在这里错过了什么吗?
Jer*_*ink 25
您可以在Get方法的声明中省略<T>.您没有为<T>所说的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);
}
Run Code Online (Sandbox Code Playgroud)
您可以在泛型和非泛型类中创建泛型方法.
public class Foo
{
public T Get<T>(int a)
{
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以在泛型类中执行此操作,但使用其他类型.
public class Foo<T>
{
public S Get<S>(int a)
{
}
}
Run Code Online (Sandbox Code Playgroud)
你想要这个:
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);
}
Run Code Online (Sandbox Code Playgroud)
基本上你正在尝试定义代码Get<T>().当您放置该泛型定义时,您说它是特定于该方法的,而不是整个类.