2012-07-18 83 views
0

我正在編寫Silverlight和WCF項目。從多個不同的列表創建通用列表

我已經在Silverlight中使用實體框架從數據庫中獲取數據,我有多個使用EF的頁面。

現在,我有超過100種類型的實體類,因此有多個已知的列表類型。

在我的WCF界面中,我想創建一個通用函數,我可以接受所有這些列表類型作爲一個通用參數。

所以我的WCF功能應該像

public string TestBadal(List<Object> list) 
    { 
     return "test"; 

    } 

我在這裏的問題是,我怎麼能施展所有已知的名單列出。我對此很新,所以任何幫助將不勝感激。

謝謝。

+0

你想對所有列表做什麼?這個選擇會影響我會採取的方法。在你的例子中,你可以刪除參數,解決問題,'TestBadal'仍然會返回''test''。 – Jodrell 2012-07-18 09:01:25

+0

@Jodrell上面只是示例代碼,我需要在列表上做一些計算然後返回字符串。所以我需要參數 – user867198 2012-07-19 05:46:20

回答

1

您還可以使用t

public static List<T> o<T>(List<T> a) 
     { 
      return a = new List<T>(); 
     } 
+0

我需要在WCF中編寫上述語句,並且我無法在其中寫入靜態。任何想法,如何使這項工作? – user867198 2012-07-18 10:27:24

0

由於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); 

我希望這個答案既給你一些想法,並說明你想要什麼我的觀點是正確的答案取決於你的功能來實現。