[英]C# - Assign an object's field as reference to another object's field (like a pointer)
[英]C# assign one reference type to another without it's reference to the object
我可以在不給該對象提供引用的情況下為引用類型分配值嗎? 就像我有獲取fileinfo的函數一樣,我想檢查是否以后在其他線程中更改了。
例
info = GetInfo(path);
checkInfo=info; // I make changes to info later, but I wanna checkInfo to remain the same
您要么需要克隆info變量,要么需要重新分配它。 手動克隆它會花費很多時間,而且可能很脆弱,因此我建議您這樣做:
checkInfo = info:
info = GetInfo(path);
如果您未在到達此處之前更改info變量,另一種選擇是使用GetInfo設置checkInfo。 考慮以下事實:如果是這種情況,則GetInfo將為兩者構建相同的對象,因此您將獲得相同的結果。
據我了解您的問題,您需要創建信息對象的深層副本
這是一個解決方案 (使用序列化)
創建擴展方法,如下所示:
public static class ExtensionMethods
{
// Deep clone
public static T DeepClone<T>(this T a)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, a);
stream.Position = 0;
return (T) formatter.Deserialize(stream);
}
}
}
用它:
checkInfo = info.DeepClone();
PS通常,需要深度克隆意味着需要代碼重構 。 不一定,但很多時候。我認為在您的情況下,應該有比復制對象更好的解決方案。
您可以將FileInfo類隱藏/包裝在另一個類中,並讓另一個線程僅訪問包裝類。 當另一個線程更改FileInfo時,包裝器類可以觸發一個事件,例如FileInfoChanged。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.