2015-04-03 44 views
3

我有實現了一些接口類:是否有可能使這種方法一般

public interface IMyInterface 
{ 
    string GetKey(); 
    void SetData(List<int> data); 
} 

public class A : IMyInterface { .. } 
public class B : IMyInterface { .. } 

我有一種方法,它獲取這個類的集合,使同樣的事情:

public void methodA(List<A> items) 
{ 
    foreach(var item in items) 
    {  
     // do something with A.GetKey(); 
     // do something with A.SetData(); 
    } 
} 

public void methodB(List<B> items) 
{ 
    foreach(var item in items) 
    {  
     // do something with B.GetKey(); 
     // do something with B.SetData(); 
    } 
} 

我想使這個方法一般:

public GenericMethod<T>(T items) where T: IEnumerable 
{ 
    for(var item in items) 
    { 
     // how can I get the item.GetKey(); 
    } 
} 

我怎麼能說編譯器的T的要素: umerable實現IMyInterface並擁有方法GetKey()?

回答

6

,你可以做這樣的:

public void GenericMethod<T>(IEnumerable<T> items) 
    where T : IMyInterface 
{ 
    for(var item in items) 
    { 
     // how can I get the item.GetKey(); 
    } 
} 

雖然在目前的情況下,你並不需要仿製藥使用tihs:

public void GenericMethod(IEnumerable<IMyInterface> items) 
{ 
    for(var item in items) 
    { 
     // how can I get the item.GetKey(); 
    } 
} 
+0

感謝。特別是最後的評論。 – demas 2015-04-03 05:14:23

4

你可以只讓你的約束:where T: IEnumerable<IMyInterface>

但是你甚至都不需要這一點,可能只是讓你的參數的IEnumerable<T> ...

或者,如果你只需要一個IMyInterface你可以只避免仿製藥完全和傳遞IEnumerable<IMyInterface>參數

順便說一句:你的語法都錯了

Here's a fiddle所有THRE Ë方法

相關問題