我想知道是否可以執行這樣的方法,而不會在返回時進行丑陋的轉換? public static AbstractFileReader<T> GetReader<T>(string filename, T data) { if(data is string) { return GetTextFileReader(filename) as AbstractFileReader<T>; } else if(data is byte[]) { return GetBytesFileReader(filename) as AbstractFileReader<T>; } else { Debug.LogError("There is no reader for that type of data : " + data.GetType().ToString()); return null; } }為了簡單起見,這是我的架構:> AbstractFileReader<T> => The generic base class> AbstractTextFileReader : AbstractFileReader<string> => an abstract class> StandaloneTextFileReader : AbstractTextFileReader => the final implementation我的第一個想法是采用這樣的方法: public static AbstractFileReader<T> GetReader<T>(string filename, T data) { if(data is string) { return StandaloneTextFileReader(filename); } else if(data is byte[]) { return StandaloneBytesFileReader(filename); } else { Debug.LogError("There is no reader for that type of data : " + data.GetType().ToString()); return null; } }但我的編譯器似乎不接受它。有什么辦法可以實現這一點嗎?謝謝
1 回答

元芳怎么了
TA貢獻1798條經驗 獲得超7個贊
泛型在這里對你沒有任何幫助。
T
您目前所使用的只是指定其中一個參數的類型(除了查詢其類型之外,您甚至不使用該參數)。您可以像這樣輕松地編寫它AbstractFileReader GetReader(string filename, Object data)
。
泛型的全部要點是不關心Type 是什么(盡管您可以對其進行限制),并且無論 TypeT
是什么(例如List
s),泛型類公開的所有方法都以相同的方式運行。
這里的情況并非如此。
因此,您根本不應該在這里使用泛型。只需在某處有一個GetReaderForString
andGetReaderForBytes
方法,并根據需要返回 aStandaloneTextFileReader
或StandaloneBytesFileReader
(或者完全放棄這些方法,只返回new
適當的類)。
- 1 回答
- 0 關注
- 156 瀏覽
添加回答
舉報
0/150
提交
取消