0

次のようなプロパティを持つ単純な患者クラスがあります

 public int PatientId { get; set; }
 public string FirstName { get; set; }
 public string LastName { get; set; }

および、PatientId に基づいてランダムな患者を返す関数

 public static Patient GetRandomPatient(IEnumerable<Patient> patList)
        {
            Random r = new Random();
            int patientValue = r.Next(patList.Min().PatientId, patList.Max().PatientId);
            //return from g in patList
            //       where g.PatientId == patientValue
            //       select g;
            var test = from g in patList
                       where g.PatientId == patientValue
                       select g;
            return (Patient)test;
        }

コメントアウトされた行は、Random クラスによって選択された PatientId を持つ患者を返す最初の試みです。それはコンパイルされず、エラーが発生 Cannot implicitly convert type... (are you missing a cast)? したので、コメントアウトされていない反復を実行し、例外が発生し At least one object must implement IComparableました。

それで、私はこれをreturnステートメントとして試しました

 Patient testPatient = patList.First(x => x.PatientId == patientValue);
 return testPatient;

これはエラーなしでコンパイルされますが、実行すると、1 つのオブジェクトが IComparable を実装する必要があるという同じ例外が発生します。

私は2つのことを知りたいと思います単一の患者オブジェクトのみを返すことができます)?2. なぜコードは

Patient testPatient = patList.First(x => x.PatientId == patientValue);
 return testPatient;

コンパイルしてコンパイル エラーは発生しませんが、他の反復と同じ例外で爆弾が発生しますか?

主な機能

         List<Patient> patientList = new List<Patient>();
    patientList.Add(new Patient() { PatientId = 101, FirstName = "John", LastName = "Jacosdfasdfasdfb" });
                    patientList.Add(new Patient() { PatientId = 100, FirstName = "Mary", LastName = "Wilson" });
                    patientList.Add(new Patient() { PatientId=102, FirstName="Max",LastName="Payne"}); 
//Call that bombs the program Console.WriteLine(Patient.GetRandomPatient(patientList).PatientId);
4

2 に答える 2