1

私は静的リストを持っています:

public static List<IMachines>mList =new List<IMachines>();

このリストには、2つの異なるタイプのオブジェクト(マシン)が含まれています。

IMachines machine = new AC();
IMachines machine = new Generator();

リストにアイテムを追加した後、nameプロパティで特定のマシンを検索したい場合、foreachループをトラバーサルに使用した後、そのアイテムがリストに見つかった場合...アイテムがACタイプであるかどうかをどのように知る必要がありますかまたはGeneratorタイプしますか?

4

6 に答える 6

5

is演算子を使用できます:

オブジェクトが特定のタイプと互換性があるかどうかを確認します

例えば:

if(item is AC)
{
  // it is AC
}
于 2012-05-23T13:56:56.503 に答える
3
    interface IVehicle {

    }

    class Car : IVehicle
    {

    }

    class Bicycle : IVehicle
    {

    }

    static void Main(string[] args)
    {
        var v1 = new Car();
        var v2 = new Bicycle();

        var list = new List<IVehicle>();
        list.Add(v1);
        list.Add(v2);

        foreach (var v in list)
        {
            Console.WriteLine(v.GetType());
        }

    }
于 2012-05-23T14:00:13.093 に答える
2

「is」演算子を使用します。

List<IMachines> list = new List<IMachines>();
list.Add(new AC());
list.Add(new Generator());
foreach(IMachines o in list)
{
  if (o is Ingredient)
  {
    //do sth
  }
  else if (o is Drink)
  {
    //do sth
  }
}
于 2012-05-23T14:02:14.447 に答える
1

このメソッドを使用してOfType()、指定されたタイプのアイテムのみを返すこともできます。

IEnumerable<Generator> generators = mList.OfType<Generator>();
于 2012-05-23T13:58:53.207 に答える
0

isandas演算子を使用します。

        List<IMachines> mList =new List<IMachines>();
        IMachines machine = mList.Where(x => x.Name == "MachineName").FirstOrDefault();

        if (machine != null)
        {
            if (machine is Generator)
            {
                Generator generator = machine as Generator;
                //do something with generator
            }
            else if (machine is AC)
            {
                AC ac = machine as AC;
                //do something with ac
            }
            else
            {
                //do you other kinds? if no, this is never going to happen
                throw new Exception("Unsupported machine type!!!");
            }

        }
于 2012-05-23T14:02:55.073 に答える
0

タイプに基づいて異なる操作を実行する場合は、を使用できますGroupBy type

これにより、各派生型に対応するサブリストを取得できます。

以下はコードスニペットです

    void Main()
    {
        List<IMachines> mList = new List<IMachines>();

        mList.Add(new AC());
        mList.Add(new Generator());
        mList.Add(new AC());
        mList.Add(new Generator());
        mList.Add(new Generator());
        mList.Add(new Generator());

        var differentIMachines = mList.GroupBy(t=>t.GetType());
        foreach(var grouping in differentIMachines)
        {
                Console.WriteLine("Type - {0}, Count - {1}", grouping.Key, grouping.Count());

                foreach(var item in grouping)
                {
                //iterate each item for particular type here
                }
        }

    }

    interface IMachines {   }

    class AC : IMachines {}

    class Generator : IMachines {}
于 2012-05-23T14:14:48.323 に答える