2012-10-08 34 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

相关问题