0

基本クラスのインスタンスのリストから派生クラスのインスタンスのリストに情報を投影したいのですが、例外をキャストし続けています。これが私がやろうとしていることの例です...どうすればそれを機能させることができますか?

次のコードはhttp://ideone.com/CaXQSにあります。それが役立つ場合は、よろしくお願いします。

using System;
using System.Collections.Generic;

namespace AddingReversedNumbers
{
        public class MyDerivedClass : MyBaseClass, IMyInterface
        {
                public int InterfaceProperty { get; set; }
                public int DerivedClassProperty { get; set; }
                public List<int> DerivedClassList { get; set; }
        }

        public class MyBaseClass
        {
                public int BaseClassProperty { get; set; }
        }

        public interface IMyInterface
        {
                int InterfaceProperty { get; set; }
        }

        class Program
        {
                static void Main()
                {
                        //// This code works just fine.
                        //var derivedList = new List<MyDerivedClass>();
                        //derivedList.Add(new MyDerivedClass { BaseClassProperty = 10, DerivedClassProperty = 20, InterfaceProperty = 30 });
                        //derivedList.Add(new MyDerivedClass { BaseClassProperty = 20, DerivedClassProperty = 40, InterfaceProperty = 60 });
                        //var baseList = derivedList.ConvertAll(x => (MyBaseClass)x);

                        // This code breaks when ConvertAll() is called.
                        var baseList = new List<MyBaseClass>();
                        baseList.Add(new MyBaseClass{ BaseClassProperty = 10 });
                        baseList.Add(new MyBaseClass{ BaseClassProperty = 20 });
                        var derivedList = baseList.ConvertAll(x => (MyDerivedClass)x);
                }
        }
}
4

1 に答える 1

5

あなたのConvertAllコードでは、キャストしているだけです。基本クラスのインスタンスを派生クラスのインスタンスにキャストすることはできません。たとえば、キャスティングobjectに何を期待FileStreamしますか? どのファイルを参照しますか?

プロジェクションで新しいオブジェクトを作成する場合は、次のようにします。ConvertAll

var derivedList = baseList.ConvertAll
      (x => new MyDerivedClass { BaseClassProperty = x.BaseClassProperty });
于 2012-08-10T19:52:59.210 に答える