簡體   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