簡體   English   中英

C#將一種引用類型分配給另一種引用類型,而不引用該對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM