-3

私は2つのクラスを持っています:

  1. フィールド ID を持つクラス T1。
  2. T1 クラス T2 から継承されたクラス T2 には、一意のフィールド SomeProperty があります。

また、タイプ オブジェクト (T1 と T2) の両方を含む一意のプロパティと配列があります。このプロパティでIDを取得する必要がありますが、どのように正しく認識されるのかわかりません。

public class T_One
{
    protected int id;
    public T_One(int foo)
    {
        id = foo;
    }
    public int ID
    {
        get { return id; }
    }
}
public class T_Two : T_One
{
    protected int someProperty;
    public T_Two(int id, int foo) : base(id)
    {
        someProperty = foo;
    }
    public int Property
    {
        get { return someProperty; }
    }
}
//I have some solution, but I think it's BAD idea with try-catch.
public int GetObjectIDByProperty(Array Objects, int property)
{
    for(int i = 0; i < Objects.Length; i++)
        {
            try
            {
                if (((T_Two)(Objects.GetValue(i))).Property == property)
                {
                    return ((T_Two)Objects.GetValue(i)).ID;
                }
            }
            catch
            {
                //cause object T_one don't cast to object T_Two
            }
        }
    return -1; //Object with this property didn't exist
}
4

1 に答える 1

1

キャストすることでメソッドにアクセスできます。

is事前に Operatorでタイプを確認してください。try/catch ブロックの使用を防ぐためにキャストが続きます。またfor、コードを単純にする代わりに foreach を使用することもできます。

    public int GetObjectIDByProperty(Array Objects, int property)
    {
        foreach(T_One myT_One in Objects)
        { 
            //Check Type with 'is'
            if (myT_One is T_Two))
            {
                //Now cast:
                T_Two myT_Two = (T_Two)myT_One;    

                if (myT_Two.Property == property)
                    return myT_Two.ID;
            }
        }

        return -1; //Object with this property didn't exist
    }
于 2013-07-22T09:35:03.130 に答える