C# 泛型代码膨胀 - 我应该担心吗?

Sir*_*ers 2 c# generics

我想问一些关于泛型的问题。

我试图保持代码简单,因此我将创建一个类来处理游戏保存游戏文件的加载/保存。由于游戏的每个部分都有不同的要求,我希望尽可能轻松地访问它:

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?看起来不太好。

所以真正的问题是......我可以使用我这里的下一个版本吗?或者由于使用泛型而我应该担心吗?

Pav*_*syn 5

引用类型不存在通用代码膨胀——代码被重用。不过,对于值类型,CLR 将为每种类型生成一个单独的方法。请参阅 .NET 泛型和代码膨胀