У меня есть два списка объектаКак назначить ссылочный объект
[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 или _Результаты вроде этого:
object obj = key != "" ? Mapper(key) : Memory._Storage[Memory._Storage.Count - 1];
if(obj is string) obj as string = "test";
это изменит объект для ссылки на новую строку в памяти. Но я хочу изменить объект, на который ссылается obj.
Другими словами, obj станет «тестом», но базовый объект не будет изменен.
Я понимаю, почему это происходит, хотя я и не думал об этом, когда писал весь двигатель, и теперь у меня большие проблемы с этим. В C++ у нас есть указатели, но в C# я не хочу использовать GCHandles или неуправляемый код для этого тривиального материала, будет крайне уродливым.
Итак, как назначить объекту, на который указывает объект, вместо этого присваивается самому объекту?
Я не знаю точно, что вы пытаетесь сделать здесь, но я скажу вам, что вы» re correct: указатели на указатели на C# не удобны. Тем не менее, я знаю, что это мало значит, но я никогда не сталкивался с этой проблемой раньше. Я бы, наверное, сделал шаг назад и поставил вопрос, правильно ли это решение в первую очередь. Это кажется сложным и подверженным ошибкам, но это только мое мнение. Возможно, для того, чтобы эти разнообразные операции были введены в один нечетко типизированный метод, это не лучший способ сделать это. –
Ну, в нескольких словах у меня есть методы, которые назначают здесь или там, и мне нужен метод, который сообщает, где назначить на основе некоторых критериев. Проблема в том, что я не могу передавать такие объекты – JDE
Ваше соглашение об именах довольно нестандартно.Обычно публичные свойства или поля начинаются с заглавной буквы. Частные свойства или поля начинаются с символа подчеркивания, а затем строчной буквы. Это не большое дело, а просто похоже на то, что вы, возможно, не знаете. – bodangly