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

时间:2010-09-10 16:34:49

标签: 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);
}

我收到以下警告

  

类型参数“T”具有相同的名称   作为外部类型的类型参数   'Services.IService'

我不确定这个问题到底是什么,为什么我的返回类型与我告诉类的类型相同。我在这里错过了什么吗?

2 个答案:

答案 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>()。当您放置该通用定义时,您说它是特定于该方法,而不是整个类。