[英]How can I use a method's (whose argument has been passed by ref) return value in Main()
[英]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.