将列表别名强制转换为C#中的基础

谢尔盖

我使用俄语在C#上编写代码。我为列表创建别名类

public class Список<T> : List<T>
{
}

以及将IEnumerable强制转换为此别名的扩展方法

public static class Расширение
{
    public static Список<T> ПривестиКСписку<T>(this IEnumerable<T> source) 
    {
        return (Список<T>)(source.ToList());
    }
}

但是强制转换不起作用-InvalidCastException

谢尔盖·别列佐夫斯基(Sergey Berezovskiy)

Список<T>是一个List<T>相反不是正确的-List<T>不是从列表派生的自定义类。因此,您不能简单地将的实例转换为List<T>从其派生的某个类。

因此,您要么应该更改扩展方法的返回类型:

// which is odd, because ToList() already exists
public static List<T> ToList<T>(this IEnumerable<T> source)
{
    return source.ToList();
}

或创建派生类的新实例并返回它:

public static Список<T> ПривестиКСписку<T>(this IEnumerable<T> source)
{
    var список = new Список<T>();
    список.AddRange(source);
    return список;
}

笔记!尽量不要使用俄语-对于那些不懂俄语的人来说,这似乎很困惑,并且在键入代码时在输入语言之间进行切换确实很痛苦。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章