【发布时间】:2020-01-29 02:15:08
【问题描述】:
我想知道是否有可能做一个像这样的方法而不会在返回时出现丑陋的演员表?
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;
}
}
但似乎我的编译器不接受它。有没有办法做到这一点? 谢谢
【问题讨论】:
-
GetTextFileReader和GetBytesFileReader的代码是什么? -
您可以(并且应该)对这些条件使用模式匹配而不是 if-else。
标签: c# unity3d generics factory abstract