我有课程:
public class Throw
{
public double speed { get; set; }
public double accurency { get; set; }
}
public class FastThrow : Throw{}
public class LowThrow : Throw{}
而不是:
public static FastThrow SetFastThrow(List<object> args)
{
return new FastThrow
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
public static LowThrow SetLowThrow(List<object> args)
{
return new LowThrow
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
我希望有一个父类:
public static Throw SetThrow(List<object> args)
{
return new Throw
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
使用具有父类实例的子类声明列表或其他通用接口。然后向现有集合添加新元素。我知道下面的例子有编译错误,但它应该看起来像:
List<List<object>> firstList = new List<List<object>>();
public void Main()
{
IList<FastThrow> secondList = new List<Throw>();
foreach (var item in firstList)
{
secondList.Add(SetThrow(item));
}
}
我读到了相反的变化,不知道这是否可能。
答案 0 :(得分:2)
你不能。 Rahter比
使用子类声明列表或其他通用接口 父类的实例。
你应该
使用 parent 类声明列表或其他通用接口 chidlren 类的实例。
第二种方式,正如Anirban所说,使用泛型类,重构您的SetThrow
方法如下:
public static T SetThrow<T>(List<object> args) where T : Throw, new()
{
return new T
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
因此,只要它们是子类,您就可以使用SetThrow
方法生成不同类型的类。 e.g:
IList<FastThrow> secondList = new List<FastThrow>();
foreach (var item in firstList)
{
secondList.Add(SetThrow<FastThrow>(item));
}
泛型类的强类型和优雅使用。