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



我正在用 C# 重写一个旧的 VB 应用程序,这个应用程序是某种计算器。因此,它由一堆子例程组成,这些子例程采用一些值,并计算一些新值(中间结果(,这些值稍后用于其他一些计算。

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

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# 中这样做也有问题吗?

C# 同时提供 ref(参数是输入和输出(和 out(参数仅输出(,允许您使用方法的参数作为方法的输出。 也就是说,一般来说,使用 return 语句在 C# 中返回值被认为是最佳做法。 如果要继续使用 Visual Studio 2017,还可以使用 C# 的新功能,该函数允许从单个方法返回多个值。

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

虽然上述模式可以在 VB6、VB.net 或 C# 中实现,但在它们中的任何一个中都不是惯用语。 所有 3 种语言都认识到返回值的方法和不返回值的方法之间的区别,并鼓励人们使用适当的方法。

虽然 VB6 确实默认为 byref,但您仍然会发现大多数代码使用函数而不是 subs 返回值。

在 .net(VB 和 C#(中,引用和 out var 通常用于初始化资源或返回多个值。 由于支持命名元组,返回多个值可能很快就会变得不那么常见。

最新更新