2016-08-30 33 views
-3

我有兩個列表<>與我需要編輯的相同字段。如何爲這些列表編寫一個通用函數?通用函數爲兩個List <>

public List<?> CutField(List<?> list) 
{ 
    foreach(var element in list) 
    { 
     element.Field = // ; 
    } 
    return List<?>; 
} 
+1

這兩種類型是否實現相同的接口,指定屬性? (你真的不想公開這個字段...)另外,爲什麼要返回列表,因爲你只是修改列表元素引用的對象? –

+6

讓這兩種類型實現相同的接口並將列表聲明爲'List '。 –

+3

@TimSchmelter:或者在類型參數上有一個類型約束的泛型方法 - 這會更靈活。 –

回答

0

最好的辦法是使用泛型:

public List<T> CutField<T>(List<T> list) where T : MyInterface 
{ 
    foreach(T element in list) 
    { 
     element.Field = // ; 
    } 

    return list; 
} 

隨着

public interface MyInterface 
{ 
    object Field { get; set; } // or whatever datatype you need for the field 
} 

當然,所有可能的類型列表中應實現該接口。

另外,您還可以省略CutField的返回類型,因爲您已經在修改作爲參數傳遞的列表。

+0

嗨。我寫了,但T是紅色和VS寫給我:cfnnjt解析符號T,其中紅色:非泛型聲明不允許約束 – jack

+0

Ooops,我已更新我的答案,現在它應該工作。 – HimBromBeere

+0

是的,現在它的工作!但是現在我可以通過這個通用的兩個List嗎? – jack

相關問題