"out" 和 "ref" 的替代方案
Alternative to "out" and "ref"
我有多个函数可以输出最后的错误。
在 C++ 中,您可以只在函数原型中传递一个 nullptr 默认初始化器,它可以正常编译,但在 C# 中,它似乎不允许您初始化 out
或 ref
参数以防你不需要使用它们。
我的问题当然有很多答案,例如将它们存储在 class 中等等,但出于我的目的,从函数本身传递它是首选方式。
那么有没有什么方法可以让一个函数有一个类似于 out
或 ref
的参数,并且能够在用户不想使用它的情况下将其初始化为默认值?
也许你能以某种方式使用 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 值以及可能在此过程中发生的任何错误。)
我有多个函数可以输出最后的错误。
在 C++ 中,您可以只在函数原型中传递一个 nullptr 默认初始化器,它可以正常编译,但在 C# 中,它似乎不允许您初始化 out
或 ref
参数以防你不需要使用它们。
我的问题当然有很多答案,例如将它们存储在 class 中等等,但出于我的目的,从函数本身传递它是首选方式。
那么有没有什么方法可以让一个函数有一个类似于 out
或 ref
的参数,并且能够在用户不想使用它的情况下将其初始化为默认值?
也许你能以某种方式使用 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 值以及可能在此过程中发生的任何错误。)