簡體   English   中英

C#和基類派生轉換

[英]C# and Base-to-Derived Class Casting

我想將信息從基類實例列表投影到派生類實例列表中,但是我一直在遇到強制轉換異常。 這是我要執行的操作的示例...如何使其起作用?

以下代碼位於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);
                }
        }
}

在您的ConvertAll代碼中,您只是強制轉換。 您不能將基類實例轉換為派生類實例。 例如,您希望將object強制轉換為FileStream做什么? 它指的是哪個文件?

如果要在ConvertAll投影中創建一個對象,只需執行以下操作:

var derivedList = baseList.ConvertAll
      (x => new MyDerivedClass { BaseClassProperty = x.BaseClassProperty });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM