我使用俄语在C#上编写代码。 我为List
创建了别名类public class Список<T> : List<T>
{
}
将IEnumerable转换为此别名的扩展方法
public static class Расширение
{
public static Список<T> ПривестиКСписку<T>(this IEnumerable<T> source)
{
return (Список<T>)(source.ToList());
}
}
但是无法运行 - InvalidCastException
答案 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;
}
}