"out" 和 "ref" 的替代方案

Alternative to "out" and "ref"

我有多个函数可以输出最后的错误。

在 C++ 中,您可以只在函数原型中传递一个 nullptr 默认初始化器,它可以正常编译,但在 C# 中,它似乎不允许您初始化 outref 参数以防你不需要使用它们。

我的问题当然有很多答案,例如将它们存储在 class 中等等,但出于我的目的,从函数本身传递它是首选方式。

那么有没有什么方法可以让一个函数有一个类似于 outref 的参数,并且能够在用户不想使用它的情况下将其初始化为默认值?

也许你能以某种方式使用 c++ 语法? (指针和 byrefs,可能使用了不安全的代码?)

这可能有点乏味,但您可以为每个函数实现无错误的重载:

using System;

class MainClass {
  public static int DoThing(int a, int b, out string error) {
    error = null;
    if(a > 0 && b > 0) return a * b;
    error = "Both arguments need to be > 0, so I'm just returning zero";
    return 0;
  }
  public static int DoThing(int a, int b) {
    return DoThing(a, b, out _);
  }
  public static void Main (string[] args) {
    Console.WriteLine(DoThing(3, 6).ToString());
  }
}

(或者您可以考虑一个通用的 return 类型,它包装了实际的 returned 值以及可能在此过程中发生的任何错误。)