C# “替代方案”;“出去”;及;参考「;

C# “替代方案”;“出去”;及;参考「;,c#,ref,out,C#,Ref,Out,我有多个函数,可以从中输出最后的错误 在C++中,你可以在函数原型中传递一个null pTR缺省初始化器,它编译得很好,但是在C语言中,它不允许你初始化 Out它可能有点乏味,但是对于每个函数,您可以有一个OUT错误更少的超载: using System; class MainClass { public static int DoThing(int a, int b, out string error) { error = null; if(a > 0 &&

我有多个函数,可以从中输出最后的错误

<>在C++中,你可以在函数原型中传递一个null pTR缺省初始化器,它编译得很好,但是在C语言中,它不允许你初始化<代码> Out<<代码>或<代码> REF 参数,以防你不需要使用它们。 当然,对于我的问题有很多答案,比如只将它们存储在类中等等,但是出于我的目的,从函数本身传递它将是首选的方式

那么,有没有办法让函数具有类似于
out
ref
的参数,并能够在用户不想使用它的情况下将其初始化为默认值


也许你可以用C++语法?(指针和byref,可能使用不安全的代码?

这可能有点乏味,但每个函数都可能有一个out-error-less重载:

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());
  }
}

(或者您可以考虑一个通用的返回类型,它包括实际返回值和沿着路径发生的任何错误)。

< P>它可能有点乏味,但是对于每个函数,您可以有一个OUT错误更少的超载:

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());
  }
}

(或者您可以考虑一个通用的返回类型,它包括实际返回值和沿着路径发生的任何错误,也许)。是否正在查找?对于

out
,请重载该方法并使用
out.
。在调用这些函数时是否尝试执行某种验证?然后将验证结果/错误传递出去?现在我想起来了,这有一种试图将C++-ism与C#混为一谈的味道。。。你能给我们看一些示例代码吗?@openshac是的,这正是我想要做的,而且似乎Damien和AKX的答案正是我想要的,这有点不清楚。是否正在查找?对于
out
,请重载该方法并使用
out.
。在调用这些函数时是否尝试执行某种验证?然后将验证结果/错误传递出去?现在我想起来了,这有一种试图将C++-ism与C#混为一谈的味道。。。你能给我们看一些示例代码吗?@openshac是的,这正是我想要做的,而且似乎Damien和AKX的答案正是我想要的