0

次のような2つのクラスがあります。

public class Person
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public class Vampire
    {
    public long Id { get; set; }
}

次に、人のリストと吸血鬼のリストの 2 つのリストがあります。すべての吸血鬼は人です。

必要なのは、感染者と感染していない人の 2 つの子リストです。for を使用して 2 つのリストを作成していますが、linq などを使用して可能であることはわかっています。

何か助けはありますか?

4

4 に答える 4

3

このようなもの:

var vampireIds = new HashSet<long>(vampireList.Select(x => x.Id));
var infectedPersons = personList.Where(x => vampireIds.Contains(x.Id));
var regularPersons = personList.Where(x => !vampireIds.Contains(x.Id));
于 2012-04-10T21:40:11.993 に答える
1

私は次のようなものに行きます:

void Main()
{
    var list = new List<Person>(){ new Person(){ Id = 1 }, new Vampire(){ Id = 2 } };
    var infected    = list.Where (x => x is Vampire);
    var notInfected = list.Except(infected);
}

public class Person
{
    public long Id { get; set; }
    public string Name { get; set; }
}

public class Vampire : Person
{
}
于 2012-04-10T21:51:17.847 に答える
0

人だけが Vampire になることができる場合、Person から Vampire を継承し、すべての人を反復処理して、それらが Vampire であるかどうかを確認できます。はいの場合 -> 吸血鬼リストに追加し、そうでない場合は非吸血鬼リストに追加します。

于 2012-04-10T21:41:54.527 に答える
0

これを試して:

var people = new List<Person>
             {
                 new Person {Id = 1, Name = "John"},
                 new Person {Name = "Dave", Id = 2},
                 new Person {Id = 3, Name = "Sarah"}
             };

var vamps = new List<Vampire> {new Vampire {Id = 1}};

var theInfected = people.Where(p => vamps.Select(v => v.Id).Contains(p.Id));

var theAfraid = people.Except(theInfected);

foreach (var person in theInfected)
   {
       System.Console.WriteLine(person.Name + " Is Infected!");
   }

foreach (var person in theAfraid)
  {
     System.Console.WriteLine(person.Name + " Is Afraid!");
  }

お役に立てば幸いです。

于 2012-04-10T21:51:19.377 に答える