2012-10-08 67 views
-1

我有一類應用,它實現IAPP接口類 這IAPP接口是這樣Linq.ConvertAll類轉換爲有接口類型

interface IApp 
    { 
     string Status; 
     dateTime start; 
     datetime end; 
    } 

現在我想轉換列表使用LINQ 此列出我可以這樣做

//AppClassList is a List<App> 
List<IApp> result = AppClassList.ConvertAll<IApp>(o => (IApp)o); 

,但我想要做自定義代碼,而轉換應用到IAPP, 像我想將狀態設置屬性取決於開始和結束日期diffrence,假設差爲一天,然後站圖斯將「優秀」如果兩個天遂「好」如果三個天遂「OK」等等......

請建議我我如何能做到這一點,而使用C#.NET

+0

您不會繼承一個接口,而是實現它。 – Jodrell

+0

這段代碼是否可以編譯? – Jon

+0

是這一行正在編譯列表 result = AppClassList.ConvertAll (o =>(IApp)o); –

回答

1
轉換應用到IAPP
List<IApp> result = AppClassList.ConvertAll<IApp>(o => ConvertToIApp(o)); 
    { 
     IApp result = (IApp)o; 
     TimeSpan span = result .end - result .start; 
     if (span.TotalDays > 1) 
     { 
      result.Status = "Excellent"; 
     } 
     return result; 
    }); 

且此方法:

public IApp ConvertToIApp(Object element) 
{ 
    IApp result = (IApp)element; 
    TimeSpan span = result.end - result.start; 
    if (span.TotalDays > 1) 
    { 
     result.Status = "Excellent"; 
    } 
    return result; 
} 

你可以寫:

List<IApp> result = AppClassList.ConvertAll<IApp>(o => ConvertToIApp(o)); 

List<IApp> result = AppClassList.ConvertAll<IApp>(ConvertToIAppo); 
+0

我們可以調用convertall中的任何方法來計算值並返回相同的值 –

+0

是的,我們可以使用任何代碼。 http://msdn.microsoft.com/en-us/library/bb397687.aspx –

+0

這使用lambda來達到我的答案相同+1 – Jodrell

0

認爲你是後:

someList.Cast<OtherType>(); 

你可能要在那裏藏漢+堅持ToList()總是可以換行了你自己的擴展方法。

0

OK,

IList<SomeIAppImplementor> before = ... 
var iapps = new List<IApp>(before.Count) 

for (i = 0; i < before.Count; i++) 
{ 
    var iapp = (IApp)before[i]; 
    if (iapp. ... 
    { 
     iapp.Status = ... 
    } 
    iapps[i] = iapp; 
} 

同時使用這,我想是你想達到什麼樣的索引這將遍歷列表中只出現一次。

0

你可以使用select然後在lambda中輸入=>左括號{}然後處理你想要在那裏做什麼 - 你說你想根據差異設置狀態。

List<App> appList = new List<App>(); 
    List<IApp> iAppList = appList.Select(x => 
    { 
    IApp app = x; 
    int difference = (app.end - app.start).Days; 
    if (difference == 1) 
     app.Status = "Good"; 
    return app; 
    }).ToList(); 

也會使你的接口都可以在App類中設置的屬性,這會再轉換爲IAPP並設置適當IAPP的屬性。

interface IApp 
    { 
    string Status {get; set;} 
    DateTime start {get; set;} 
    DateTime end {get; set;} 
    } 
+0

使用'Select'將使用'Enumerator'作爲'ConvertAll'將使用訪問「索引器」,這對於「列表」 – Jodrell

相關問題