泛型警告T与其他类型的类型同名

jqu*_*uth 16 c# generics

鉴于以下内容

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)


The*_*Sky 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);
}
Run Code Online (Sandbox Code Playgroud)

基本上你正在尝试定义代码Get<T>().当您放置该泛型定义时,您说它是特定于该方法的,而不是整个类.