由於Sophex規定,你可以寫一個通用的函數來處理的任何一個List<>
或更好的IList<>
。
所以,你的例子會成爲,
public string TestBadal<T>(IList<T> list)
{
return "test";
}
這是非常通用的,需要並暗示有關T
小。這對你想要執行的處理可能是足夠的,但是,你不會說。
通常,您應該將您的方法簽名視爲調用者必須對該函數作出的承諾。您應該將承諾限於只有您的職能完成其工作所需的內容。通過這種方式,承諾更容易實現,並且您的功能可以在來自調用方的更少承諾的情況下得到更多的重用。
你的功能,因爲它代表,doesen't確實需要一個參數,將更好地定義爲string const
但說,你唯一想做的就是枚舉,你可以使用的項目,
public string TestBadal<T>(IEnumerable<T> entities)
{
foreach(T entity in entities)
{
...
}
}
如果你的如果您需要了解列表類型的財產以後,你有兩個選擇合理的處理,尤其是涉及到EF性質,你可以做的數據源,
public string TestBadal<TEntity>(EntitySet<TEntity> entities)
where TEntity : class
{
...
}
。 要麼你需要類型來實現一個特定的接口,這essentialy讓你的功能非泛型,並可能與EF結合的尷尬。
public string TestBadal(IEnumerable<IDefinedType> definedTypeInstances)
{
foreach(IDefinedType instance in definedTypeInstances)
{
var x = instance.SomeDefinedProperty;
}
}
或者,你可以把函數的非通用部件爲typed delegate參數,保持功能一般,可能是財產以後這樣的。
public string TestBadal<T>(
IList<T> list,
Func<T, string> stringSelector)
{
var result = new StringBuilder();
for(var i = 0; i < list.Count; i++)
{
result.AppendLine(stringSelector(list[i])
}
return result.ToString();
}
你可以稱之爲一個lambda表達式的財產以後這樣的這一功能,
var result = TestBadal(entities, e => e.SomeStringProperty);
我希望這個答案既給你一些想法,並說明你想要什麼我的觀點是正確的答案取決於你的功能來實現。
你想對所有列表做什麼?這個選擇會影響我會採取的方法。在你的例子中,你可以刪除參數,解決問題,'TestBadal'仍然會返回''test''。 – Jodrell 2012-07-18 09:01:25
@Jodrell上面只是示例代碼,我需要在列表上做一些計算然後返回字符串。所以我需要參數 – user867198 2012-07-19 05:46:20