繁体   English   中英

如何使用Tuple <>返回值,而不是在方法中使用'out'参数?

[英]How can I use Tuple<> to return value instead of using 'out' argument in method?

我想使用Tuple<>从void方法获取结果值。

小代码示例:

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”,则它们将获得“ Bob”。 但是,您可以这样写:

xNode = new XElement("dir1");

xNode变量重新分配给新对象。 他们现在指向两个不同的对象。 要获得所需的内容,您需要通过ref传递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 ,它应该自动将其拾取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM