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