تبدیل لیست DerivedClass به لیست BaseClass در C#

mohsen1 هفته قبل
ارسال شده در
csharp

فرض کنید دو کلاس به نام های DerivedClass و BaseClass تعریف کرده ایم که DerivedClass از BaseClass ارث بری می کنید. حال می خواهیم یک List<DerivedClass> را به یک List<BaseClass> تبدیل کنیم. اما امکان این کار به صورت مستقیم وجود ندارد. اما وقتی یک شی از نوع DerivedClass را به یک متغیر از نوع BaseClass نسبت می‌دهیم، این کار به درستی انجام می‌شود.

برای تبدیل یک List<DerivedClass> به یک List<BaseClass>، شما می‌توانید از متدهایی همچون ConvertAll یا Cast استفاده کنید. به‌عنوان مثال:

      List<A> listOfA = new List<C>().ConvertAll(x => (A)x);
// یا
List<A> listOfA = new List<C>().Cast<A>().ToList();

    

با این حال، استفاده از این روش‌ها به ایجاد یک لیست جدید منجر می‌شود و ارتباط بین لیست جدید و لیست اصلی قطع می‌شود. اگر شما نیاز دارید که یک لیست را بدون ایجاد یک نسخه جدید و مجزا از آن تغییر دهید، می‌توانید یک کلاس wrapper برای این کار ایجاد کنید.

یک راه مناسب این است که از یک کلاس مانند کلاس CastedList که در زیر تعریف شده استفاده کنید که قابلیت تبدیل لیست‌ها را بدون کپی کردن آن‌ها فراهم کند. این روش می‌تواند توسعه‌پذیری و کارایی کد شما را بهبود بخشد. به عنوان مثال:

      public class CastedList<TTo, TFrom> : IList<TTo>
{
    public IList<TFrom> BaseList;

    public CastedList(IList<TFrom> baseList)
    {
        BaseList = baseList;
    }

    // پیاده‌سازی‌ بقیه متدها برای IList<TTo>...

    public static IList<TTo> CastList<TFrom, TTo>(this IList<TFrom> list)
    {
        return new CastedList<TTo, TFrom>(list);
    }
}

    
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!