我想知道是否可以执行这样的方法,而不会在返回时进行丑陋的转换? 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 关注
- 91 浏览
添加回答
举报
0/150
提交
取消