我想知道是否可以执行这样的方法,而不会在返回时进行丑陋的转换?    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是什么(例如Lists),泛型类公开的所有方法都以相同的方式运行。
这里的情况并非如此。
因此,您根本不应该在这里使用泛型。只需在某处有一个GetReaderForStringandGetReaderForBytes方法,并根据需要返回 aStandaloneTextFileReader或StandaloneBytesFileReader(或者完全放弃这些方法,只返回new适当的类)。
- 1 回答
 - 0 关注
 - 190 浏览
 
添加回答
举报
0/150
	提交
		取消
	