0

そのため、FindAll を使用して、一致するオブジェクトのリストを返そうとしています。たとえば、1つの条件のみを使用する場合にうまく機能します

patientstatus = statuslist.FindAll(delegate(StatusReader.onestatus p1)
{
   return p1.WL_ID == patlist[i].wl_id;
});

しかし、複数の条件を使用したいのですが、その中には if ステートメントが含まれているものもあり、その方法がわかりません。形式には return ステートメントが必要なようで、Microsoft の例 (http://msdn.microsoft.com/en-us/library/fh1w7y8z.aspx) では 1 つの条件のみが使用されています。

条件ごとに複数の FindAll メソッドを使用するか、自分ですべての値をスキャンするループを作成することもできますが、明らかに欠けているものがあるはずですよね?

4

4 に答える 4

2

「if ループ」が何であるかはよくわかりませんが、いつでもそれらをつなぎ合わせることができます。

patientstatus = statuslist.FindAll(delegate(StatusReader.onestatus p1)
{
   if(p1.WL_ID != patlist[i].wl_id)
       return false;

   if(otherStuff != 5)
       return false;

   for(var x in p1.stuff)
       if(x == 7)
           return false;

   return true;
});
于 2012-09-11T13:39:09.433 に答える
2

次のことを試してください。

var patientStatus = statusList.Where(p => p
{
    // Put in logic here as you need
    return p.WL_ID == patlist[i].wl_id || p.YourSecondProperty == WhateverYouWantToCheck;
}
于 2012-09-11T13:39:51.593 に答える
1

次のようなことを考えることができます

public abstract class Condition
{
    public abstract bool Sutisfied(StatusReader.onestatus status);
}

public class Condition1 : Condition
{
   public override bool Sutisfied(StatusReader.onestatus status)  {

      //check for something and return 
   }
}

public class Condition2 : Condition
{
   public override bool Sutisfied(StatusReader.onestatus status)  {

      //check for something and return 
   }
}

After には、次のような条件のリストを含めることができます

List<Condition> conditions = 
     new List<Condition>{new Conditon1(), new Condition2()}

このリストの後、内部で使用します

patientstatus = statuslist.FindAll(delegate(StatusReader.onestatus status)
{
    return conditions.TrueForAll(c=>c.Sutisfied(status));
});
于 2012-09-11T13:42:02.607 に答える
1

デリゲートは、条件に一致する場合は true を返し、条件に一致しない場合は false を返すだけです。単一行の return ステートメントである必要はありません。すべてのコード パスで true または false を返す限り、ブール値を作成したり、if ステートメントを使用したり、for ループを作成したり、デリゲートで必要なものをすべて作成したりできます。

そのため、必要な数の if ステートメントまたはループを実行できます。

本当に1行で維持したい場合は、次のようなことができます...

return (condition1 == condition1) || (condition2 == condition2) || (condition3 == condition3);
于 2012-09-11T13:42:49.510 に答える