1

私が行った場合:

IList<WSACLI_ComunicazionePersonale> Comunicazioni = (from XmlNode n in m_oNode.SelectNodes("m_Detail_Row")
                     select new WSACLI_ComunicazionePersonale(n)).ToList();

それは完璧に機能し、WSACLI_ComunicazionePersonaleオブジェクトのリストを作成します!

しかし、もしそうなら:

IList<WSACLI_ComunicazionePersonale> Comunicazioni = m_oNode.SelectNodes("m_Detail_Row").Cast<WSACLI_ComunicazionePersonale>().ToList();

リストはnullです。コンストラクターを呼び出してCast()いないようですか?

4

4 に答える 4

6

キャストは新しいオブジェクトを作成しないため、既存のオブジェクトを* 「再型付け」するだけなので、別の方法で使用できます。工事は一切ありません。

Catをジェネリックとして扱うAnimalことはできますが、「新しい」は作成しませんCat。さらに、それはまだCat-ジェネリックのように対話Animalしているだけです。

また真である可能性がありAnimalます。であるかのように操作することはできますが、実際にであるCat場合は (法的に) として扱うことはできません。DogCat

* 再入力とは、オブジェクトのタイプを変更することを意味します。オブジェクトの基になるタイプは変更されません。

于 2013-01-30T14:03:33.223 に答える
1

新しいオブジェクトは作成しません。インスタンスは同じままです。インスタンスを参照する変数のタイプのみが変更されます。

于 2013-01-30T14:05:16.377 に答える
0

最初のコードと同じ機能が必要な場合は、2番目のコードは次のようになります。

IList<WSACLI_ComunicazionePersonale> Comunicazioni = m_oNode
    .SelectNodes("m_Detail_Row")
    .Select(n=> new WSACLI_ComunicazionePersonale(n))
    .ToList();

ノードをオブジェクトにキャストできないため、キャストはありません。最初の例では、新しいインスタンスを作成し、ノードをコンストラクターに渡しました。

于 2013-01-30T14:06:04.670 に答える
0

Objectコンストラクターは、.Net 言語での新しいインスタンスが作成されたときにのみ呼び出されますCasting (Type Casting)が、オブジェクトの既存の型を別の型に変更する方法です。

型キャスト (ウィキペディアで)

コンピューター サイエンスでは、型変換、型キャスト、強制は、暗黙的または明示的に、あるデータ型のエンティティを別のデータ型に変更するさまざまな方法です。これは、型階層または型表現の特定の機能を利用するために行われます。1 つの例は小さな整数です。これはコンパクトな形式で格納でき、算術計算で使用するときに大きな表現に変換できます。オブジェクト指向プログラミングでは、型変換により、プログラムはある型のオブジェクトを祖先型の 1 つとして扱い、それらとのやり取りを簡素化できます。

Animal animal = new Cat();

Bulldog b = (Bulldog) animal;   // if (animal is Bulldog), stat.type(animal) is Bulldog, else an exception
b = animal as Bulldog;          // if (animal is Bulldog), b = (Bulldog) animal, else b = null

animal = null;
b = animal as Bulldog;          // b == null
于 2013-01-30T14:08:26.500 に答える