0

私はそれに2つのオブジェクトを持つクラスを持っています。例えば:

public class Animal
{
    public Carnivorous MeatEater { get; set; }
    public Herbivorous VegEater { get; set; }
    public Animal()
    {           
        this.MeatEater = new Carnivorous();
        this.VegEater = new Herbivorous();
    }
}

Carnivorousそして財産をHerbivorous持っていCategoryます。

このクラスには、MeatEaterまたはに格納されているデータベースからのデータのリストを設定しましたVegEater。とと を組み合わせたものCategoryから、 の個別のリストを取得する必要があります。このリストを取得するにはどうすればよいですか?MeatEaterVegEater

ありがとう!

4

3 に答える 3

2

私があなたの質問を正しく理解していれば、ここに行きます: (これは であると仮定しCategorystringいますEquals

var result = myList.SelectMany(GetValidCategories).Where(s => s != null)
                   .Distinct();

必要な機能:

public static IEnumerable<string> GetValidCategories(Animal a)
{
    List<string> categories = new List<string>();
    if (a.MeatEater != null) categories.Add(a.MeatEater.Category);
    if (a.VegEater != null) categories.Add(a.VegEater.Catergory);
    return categories;
}

ただし、これは良い設計ではありません。動物は肉や野菜を食べる動物です。彼らはそれらを持っていません。

より良い設計は次のようになります。

[Flags] public enum AnimalType { Carnivorous = 1, Herbivorous = 2, Ominovorous = 3 }
public class Animal
{
    public AnimalType Type { get; set; }
    public string Category { get; set; }
    //all the other members that Herbivorous + Carnivorous share,
    //so pretty much all of them really.
}

そうすれば、はるかに簡単になります:

var result = myList.Select(a => a.Category).Where(s => s != null).Distinct();
于 2013-07-17T15:34:01.737 に答える
0

カテゴリがまだ存在しない場合は、肉を食べる人からすべてのカテゴリをリストに追加し、野菜を食べる人からすべてのカテゴリを同じリストに追加できます。

var lstCategories = new List<string>();

foreach(string category in animal.MeatEater.Category)
    if(!lstCategories.Contains(category))
        lstCategories.add(category);

foreach(string category in animal.VegEater.Category)
    if(!lstCategories.Contains(category))
        lstCategories.add(category);

したがって、最終的に lstCategories には、最後に結合されたカテゴリの個別のセットがあります。

于 2013-07-17T15:58:41.030 に答える