-1

IApp インターフェイス クラスを実装するクラス App があります。この IApp インターフェイスは次のようになります。

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

今、私はLinqを使用してリストをリストに変換したいので、このようにすることができます

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

しかし、App を IApp に変換する際にカスタム コードを実行したいのですが、開始日と終了日の違いに応じて Status プロパティを設定したい場合、違いが 1 日であると仮定すると、ステータスは 2 日なら "Excellent"、3 日なら "Good" になります。それから「OK」など...

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

これにより、インデクサーを使用しているときにリストが1回だけ反復されます。これは、達成したいことだと思います。

于 2012-10-08T10:44:05.753 に答える
0

select を使用し、ラムダの=>開き括弧で使用{}して、そこでやりたいことを処理できます。違いに基づいてステータスを設定したいとします。

  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 に答える