繁体   English   中英

C#通用接口,通用工具,类型化方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM