我有對象的兩個列表如何分配到引用的對象
[Serializable]
private class MemorySet
{
public Dictionary<string, object> _Map;
public List<object> _Results;
public List<object> _Storage;
}
MemorySet Memory = new MemorySet();
我可以有分配爲對象鍵,例如
_Map.Add("someKey", _Results[_Results.Count - 1]);
我有一個方法
private object Mapper(string key)
{
if (Memory._Map.ContainsKey(key))
{
return Memory._Map[key];
}
else if (key.ToLower() == "result")
{
return Memory._Results[Memory._Results.Count - 1];
}
else if (key.ToLower() == "storage")
{
return Memory._Storage[Memory._Storage.Count - 1];
}
else if (key.ToLower().Contains("result"))
{
int n = Convert.ToInt32(key.ToLower().Split(new string[] { "result" }, StringSplitOptions.None)[1]);
return Memory._Results[n];
}
else if (key.ToLower().Contains("storage"))
{
int n = Convert.ToInt32(key.ToLower().Split(new string[] { "storage" }, StringSplitOptions.None)[1]);
return Memory._Storage[n];
}
else return null;
}
現在我必須分配給_Storage或_Results那樣的對象:
object obj = key != "" ? Mapper(key) : Memory._Storage[Memory._Storage.Count - 1];
if(obj is string) obj as string = "test";
這會改變obj引用內存中的一些新字符串。但是我想改變obj引用的對象。
換句話說,obj將成爲「測試」,但底層對象不會被改變。
我明白爲什麼會發生這種情況,雖然在編寫整個引擎時我並沒有想到它,現在我對這個問題有很大的困擾。在C++中,我們有指針,但在C#中,我不想使用GCHandles或非託管代碼來處理那些微不足道的事情,這會非常難看。
那麼,如何分配給對象指向的對象,而不是分配給對象本身呢?
我不知道你想在這裏做什麼,但我會告訴你,你」重新正確:指針指針在C#中不舒服。這就是說,我知道這並不意味着什麼,但我從來沒有遇到過這個問題。我可能會後退一步,質疑這是否是解決這個問題的正確方法。它看起來很複雜並且容易出錯,但這只是我的看法。也許強迫這些不同的操作變成單一模糊的方法並不是構建這種方法的最佳方式。 –
用幾句話來說,我有方法可以在這裏或那裏分配,而且我需要一個方法來告訴根據某些條件分配哪裏。問題是,我無法傳遞這樣的對象 – JDE
您的命名約定非常不規範。通常公共屬性或字段只是以大寫字母開頭。私有屬性或字段以下劃線和小寫字母開頭。它不是什麼大不了的事情,而只是你可能沒有意識到的東西。 – bodangly