有没有办法强制参数在C#中传递值而不是在C#中传递?

TyC*_*obb 6 c# vb.net

刚刚回答了一个关于用括号调用VB6方法的问题,我记得你可以强制ByRef传递参数值ByVal.研究,我发现这仍然适用于VB.NET.

但是,我在C#中找不到类似的东西.在过去的一年里,我不得不引用很多ByRef没有任何理由的VB.NET类库(相信我,我检查过).这迫使我将对象的属性设置为局部变量以传递它们.不是一个主要问题,但如果你问我不是很干净.

我想知道是否有一个我不知道的语法解决方案.

作为我当前模式的一个例子,我想避免:

var tempSomeObject = BarObject.FooProperty;
SomeVb6BusinessLogicMethod(ref tempSomeObject);
// Continue to do work and set other temp objects due to ref constraint
Run Code Online (Sandbox Code Playgroud)

在VB6和VB.NET中,您只需执行以下操作即可在ByRef参数上强制使用ByVal.

SomeVb6BusinessLogicMethod((BarObject.FooProperty)) 'Note the extra parens
Run Code Online (Sandbox Code Playgroud)

编辑:我不是在询问ByRef和ByVal之间的区别.我问C#是否有类似的方法强制ByRef参数传递ByVal.请参阅此VB.NET功能的MSDN文档. http://msdn.microsoft.com/en-us/library/chy4288y.aspx

Ser*_*rvy 5

您将需要将值显式复制到新变量并通过引用传递新变量,如您在问题中所示.C#中没有语法糖,允许编译器代表您执行此副本,就像在VB中一样.

  • @EricJ.:但请记住,所有VB正在做的是对隐藏的局部变量的赋值 - 最好的C#等价物并不复杂,它只是对可见局部变量的赋值. (2认同)
  • @EricJ.它是变量值的副本.在这种情况下,变量的值是对象的引用,因此创建了引用的副本.如果对象是值类型,则它的值将是实际值,在这种情况下,将生成**的副本. (2认同)