我想問一些關於泛型的內容。C#泛型代碼膨脹 - 我應該擔心嗎?
我想保持代碼簡單,因此我將製作一個類來處理加載/保存遊戲的savegame文件。隨着遊戲的每個部分都有不同的要求,我想擁有這個方便地:
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);
}
}
現在我可以用一個簡單的
TurnData x; s.Load("test.txt", out x);
替代稱這將是使Load函數返回對象,然後將其轉換爲TurnData類型。
TurnData x = (TurnData)s.Load("test.txt");
我對C#不太瞭解。我假設using(...) { ... }
裏面的代碼沒有得到執行,如果打開文件時出現錯誤,例如?如果有人能證實這會很好。我看到的示例代碼沒有任何錯誤處理,這對我來說似乎很奇怪,所以我添加了使用?
因此,在此次要版本中,函數返回對象而不是使用out參數,則需要更復雜的錯誤檢查代碼並可能返回null?這看起來不太好。
所以真正的問題是......我可以使用我在這裏的下一個版本,還是有擔心,我應該由於使用泛型?
'使用'塊只是try {}的簡化版本finally {//將處理一次性對象}' – SeM
基本上它調用對象的Dispose()方法,即使塊內的代碼拋出一個異常。 – SeM
我不明白你爲什麼使用泛型*編寫代碼*。爲什麼'Foo foo;加載(path,out foo);'以任何方式比'Foo foo =(Foo)Load(path)更好;'?後者似乎對我來說更加清晰,而且更簡單。你這樣做的建議有很大的價值,你應該考慮這樣做。你將不得不以任何方式編寫錯誤處理。 –