-1

我有一个实现 IApp 接口的类 App 这个 IApp 接口是这样的

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

现在我想使用 Linq 将 List 转换为 List 我可以这样做

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

但是我想在将 App 转换为 IApp 时做自定义代码,就像我想设置 Status 属性取决于开始和结束日期的差异,假设差异是一天,那么如果两天,状态将是“优秀”,如果三天,状态将是“好”然后“确定”等等...

请建议我在使用 C#.net 将 App 转换为 IApp 时如何做到这一点

4

4 回答 4

1
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);
于 2012-10-08T10:39:54.730 回答
0

认为你在追求:

someList.Cast<OtherType>();

您可能还想将 ToList() 粘贴在那里 + 可以始终将其包装在您自己的扩展方法中。

于 2012-10-08T10:41:50.190 回答
0

行,

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;
}

这将在使用索引器时准确地迭代列表一次,我认为这是您想要实现的。

于 2012-10-08T10:44:05.753 回答
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;}
  }
于 2012-10-08T10:44:18.287 回答