Я хочу получить полученное значение из метода void с помощью Tuple<>
.
Пример небольшого кода:
XElement xRoot;
DirectoryInfo di;
XElement xResult;
AddXmlNode(xRoot, di, xResult);
void AddXmlNode(Tuple<XElement, DirectoryInfo, XElement> task)
{
var xNode = (XElement)task.Item3;
xNode = new XElement("dir1");
}
Исправьте меня, если я ошибаюсь: новая переменная xNode
теперь указывает на ту же область памяти "управляемой кучи", что и xResult
? Поэтому, если значение изменения xNode
влияет на xResult
. Правильно?
Если я ошибаюсь, объясните, как я могу вернуть значение через Tuple<>
Прежде всего, да, эта строка:
var xNode = (XElement)task.Item3;
Заставляет оба элемента указывать на один и тот же элемент в памяти. Это означает, что если вы это сделали:
xNode.SomeProperty = "Bob";
Обе ссылки получат "Боб", если впоследствии они получат доступ к "SomeProperty". Однако вы пишете это:
xNode = new XElement("dir1");
Это переназначает только переменную xNode
новому объекту. Теперь они указывают на два разных объекта. Чтобы получить то, что вы хотите, вам нужно передать xResult
по xResult
, что я не думаю, что вы можете сделать с Tuple
. Даже если это возможно, это будет путать, и я бы не сделал это лично. Код, в котором вы нуждаетесь:
AddXmlNode(new Tuple<XElement, DirectoryInfo>(xRoot, di), ref xResult);
void AddXmlNode(Tuple<XElement, DirectoryInfo> task, ref XElement result)
{
var xNode = (XElement)task.Item3;
xNode = new XElement("dir1");
}
Кстати, так как Tuple
строго типизирован, вам не нужно xNode
первоначальном назначении переменной xNode
, он должен автоматически подбирать его.
Tuple<>
. Любые советы?