基于C#的Cast List别名

时间:2014-01-17 07:23:11

标签: c#

我使用俄语在C#上编写代码。 我为List

创建了别名类
public class Список<T> : List<T>
{
}

将IEnumerable转换为此别名的扩展方法

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

但是无法运行 - InvalidCastException

3 个答案:

答案 0 :(得分:2)

Список<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 список;
}

注意!尽量不要使用俄语 - 对于那些不懂俄语的人来说,它看起来像obfuscation,而当你在那里切换输入语言真的很痛苦输入代码。

答案 1 :(得分:0)

在使用Generics

时,你不需要施放
 public class Список<T> : List<T>
    {
    }
    public static class Расширение
    {
        public static List<T> ПривестиКСписку<T>(this IEnumerable<T> source)
        {
            return source.ToList();
        }
    }

答案 2 :(得分:0)

您不能将基类对象强制转换为其子类

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