Ich muss einige C++ - Code in C# übersetzen/umschreiben. Seit einigen Methoden, die Person, die die C++ Code geschrieben hatte, so etwas wie dies in dem Prototyp fertig,C++ - Null-Zeiger-Argument als optionales Argument Alternative in C#
float method(float a, float b, int *x = NULL);
Und dann in dem Verfahren so etwas,
float method(float a, float b, int *x) {
float somethingElse = 0;
int y = 0;
//something happens here
//then some arithmetic operation happens to y here
if (x != NULL) *x = y;
return somethingElse;
}
ich bestätigt habe, dass x
ist ein optionaler Parameter für die Methode, aber jetzt habe ich Probleme beim Umschreiben in C#. Wenn ich nicht Zeiger verwende und den unsicheren Modus abwinke, bin ich nicht wirklich sicher, wie man das macht, da int
nicht null
sein kann.
ich so etwas wie dies versucht haben,
public class Test
{
public static int test(ref int? n)
{
int x = 10;
n = 5;
if (n != null) {
Console.WriteLine("not null");
n = x;
return 0;
}
Console.WriteLine("is null");
return 1;
}
public static void Main()
{
int? i = null;
//int j = 100;
test(ref i);
//test(ref j);
Console.WriteLine(i);
}
}
Wenn ich die Zeilen mit der Variablen j
im main()
Methode Kommentar-, wird der Code nicht kompiliert und sagt, dass der Typ int
nicht den Typ int?
entspricht. Aber so oder so, diese Methoden werden später verwendet werden und int
wird in ihnen übergeben werden, so bin ich nicht wirklich daran interessiert, die int?
verwenden, um die Kompatibilität zu erhalten.
Ich habe optionale Argumente in C# untersucht, aber das bedeutet immer noch nicht, dass ich null
als Standardwert für int
verwenden kann, und ich weiß nicht, auf welche Werte diese Variable nicht trifft.
Ich habe auch in der ??
Null-Koaleszenz-Operator untersucht, aber das scheint das Gegenteil von dem zu sein, was ich versuche zu tun.
Könnte ich bitte einen Rat bekommen, was ich tun sollte?
Vielen Dank im Voraus.
Wenn y eine out-Variable ist, verwenden Sie vielleicht C# 'out' anstelle von ref. – Motes