为了账号安全,请及时绑定邮箱和手机立即绑定

c# 如何返回一个在工厂方法中指定泛型类的类

c# 如何返回一个在工厂方法中指定泛型类的类

PHP
犯罪嫌疑人X 2024-01-20 21:39:47
我想知道是否可以执行这样的方法,而不会在返回时进行丑陋的转换?    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方法,并根据需要返回 aStandaloneTextFileReaderStandaloneBytesFileReader(或者完全放弃这些方法,只返回new适当的类)。


查看完整回答
反对 回复 2024-01-20
  • 1 回答
  • 0 关注
  • 27 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信