我想问一些关于泛型的问题。
我试图保持代码简单,因此我将创建一个类来处理游戏保存游戏文件的加载/保存。由于游戏的每个部分都有不同的要求,我希望尽可能轻松地访问它:
public void Load<T>(string path, out T obj)
{
BinaryFormatter bf = new BinaryFormatter();
using (FileStream file = File.Open(Application.persistentDataPath + path, FileMode.Open))
{
obj = (T)bf.Deserialize(file);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以用一个简单的方法来调用它
TurnData x; s.Load("test.txt", out x);
Run Code Online (Sandbox Code Playgroud)
另一种方法是让 Load 函数返回对象,然后将其转换为 TurnData 类型。
TurnData x = (TurnData)s.Load("test.txt");
Run Code Online (Sandbox Code Playgroud)
我对 C# 不太了解。我假设如果打开文件时出现错误,则内部代码using(...) { ... }不会被执行?如果有人能证实这一点那就太好了。我看到的示例代码没有任何错误处理,这对我来说很奇怪,所以我添加了 using?
那么,在这个辅助版本中,函数返回对象而不是使用输出参数,将需要更复杂的代码来进行错误检查并可能返回 null?看起来不太好。
所以真正的问题是......我可以使用我这里的下一个版本吗?或者由于使用泛型而我应该担心吗?