开发者

Generics Warning T has same name as type from other type

开发者 https://www.devze.com 2023-01-16 04:31 出处:网络
Given the following public class Service<T> : IService<T> { 开发者_如何学PythonRepository<T> _repository = new Repository<T>();

Given the following

public class Service<T> : IService<T>
{
  开发者_如何学Python      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);
}

I get the following warning

Type parameter 'T' has the same name as the type parameter from outer type 'Services.IService'

I am not sure what the issue is with this, why does it care if my return type is the same as the type I am telling the class to be. Am I missing something here?


You can leave out the <T> in the declaration of Get methods. You are not introducing a new Type Parameter for the Get method which <T> says. The fact that you return a T is enough.

I think this will work:

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);
}

You can create a generic method in both generic and non-generic classes.

public class Foo
{
    public T Get<T>(int a)
    {
    }
}

You could also do this in a generic class, but over a different type.

public class Foo<T>
{
    public S Get<S>(int a)
    {
    }
}


You'd want this instead:

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);
}

Basically in you're code you're trying to define Get<T>(). When you put that generic definition, you're saying it's specific to that method, not the whole class.

0

精彩评论

暂无评论...
验证码 换一张
取 消