从VB转换为C#,存储子程序的值

从VB转换为C#,存储子程序的值

问题描述:

我正在用C#重新编写一个旧的VB应用程序,这个应用程序是某种计算器。所以它由一些子程序组成,这些子程序需要一些值,并计算一些新值(中间值结果),稍后将其用于其他一些计算中。从VB转换为C#,存储子程序的值

他们这样做的方式是这样的:

int in = 4; 
Call routine(in, outFromRoutine1); 

Call routine2(outFromRoutine1, outFromRoutine2); 

在VB6默认为按引用传递,所以我可以做同样的在C#这样的:

int in = 4; 
int outFromRoutine2 = 0; 
Routine(in, ref outFromRoutine1); 

int outFromRoutine2 = 0; 
Routine2(outFromRoutine1, ref outFromRoutine2); 

但我只是想,如果这被认为是一个奇怪的方式来做到这一点在C#中?这只是某种奇怪的VB做法。 在C#中这样做是否存在任何问题?

+1

功能比较正常。 '''var result = routine2(routine1(in))'''但不知道调用中的代码,这可能不正确 –

+2

ByRef在VB6代码中很常见,因为它是默认的。所以你首先要确定的是它实际上*必须*通过ref,它通常不是。也可以考虑在VS2017中使用新的C#v7 goody,您可以编写例程(in,out int outFromRoutine1),因此您不必声明变量。 –

C#同时提供ref(参数是输入和输出)和out(仅输出参数),允许您将方法的参数用作方法的输出。这就是说,一般来说,认为最好的做法是使用返回语句来返回C#中的值。如果您正在使用visual studio 2017,您还可以使用C#的新功能,该功能允许您从单一方法返回多个值。

https://docs.microsoft.com/en-us/dotnet/articles/csharp/language-reference/keywords/method-parameters

+0

不知道为什么这已被投票。这对我来说是指向正确的做事方式(移动应用程序以传回值而不是通过参考来修改变量)。Out也是一个很好的观点,我认为C#应该被一个清楚的新手考虑。好的做法,如果你要坚持“VB方式” –

+0

谢谢!我不知道新的C#功能,也没有关于使用out。 – Balle

虽然上述图案可以在VB6,VB.net或C#来实现,它不是在它们中的任何惯用的。所有3种语言都认识到返回价值的方法与没有价值的方法之间的区别,鼓励人们使用适当的方法。

尽管VB6默认使用了byref,但您仍然会发现大多数使用的代码函数返回值而不是subs。在.net(包括VB和C#)中,ref和out vars通常用于初始化资源或返回多个值。由于支持命名元组,因此返回多个值很快就会变得不那么常见。