2010-09-10 79 views
15

鑑於型泛型警告T具有相同的名稱,從其他類型的

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'

我不確定這是什麼問題,爲什麼它關心如果我的返回類型與我告訴該類的類型相同。我在這裏錯過了什麼嗎?

回答

25

您可以在Get方法的聲明中省略<T>。您沒有爲獲取方法引入新的類型參數,其中<T>說。事實上,您返回一個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) 
    { 
    } 
} 
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>()。當你把這個通用的定義,你說這是特定的方法,而不是整個班級。

相關問題