[英]C# Generic Interface, Generic Implements, Typed Method
我正在尝试使用通用接口来处理我的xml: IXmlService
List<T> Load<T>() where T : class;
XmlService
public List<T> Load<T>() where T : class {
Type type = typeof(T);
if (type == typeof(TicketData)) { return XmlTicketService.LoadInternal(); } // Error: Unable to cast from List<TicketData> to List<T>
XmlTicketService.LoadInternal()知道类型并应返回Service
internal static List<TicketData> LoadInternal() {
List<TicketData> result = new List<TicketData>();
ThreadPool.QueueUserWorkItem(
delegate {
try {
XDocument data = XDocument.Load(_xmlPath);
var query = (from element in data.Root.Descendants("Ticket")
select new TicketData() {
希望你有给我的建议:)
好吧,在这种情况下,您可以通过object
投射:
if (typeof(T) == typeof(TicketData))
{
return (List<T>) (object) XmlTicketService.LoadInternal();
}
首先, object
强制转换基本上迫使编译器将其视为“常规”强制转换。
...但是我个人认为这会引起设计异味,您可能应该在其中使用非泛型方法创建泛型接口 ,并实现ILoadable<TicketData>
或其他方法。 基本上,您的方法不是真正的通用方法-它对特定类型进行特定处理,这应该总是使您怀疑您的设计是否真正合适。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.