2016-08-05 29 views
-1

In "Unity" debuggen wir oft zu Konsole.Wie komprimiert man den Operator für diese Anweisung in Unity C#

public bool printInConsole; 

void Start() 
{ 
    if (printInConsole) Debug.Log("Starting and printing..."); 
} 

Ich möchte diese Unity-Funktion mit dem kompakten aufrufen? ternärer Betreiber.
Wie schreibe ich eine Aussage dazu in Unity mit C#?

+2

Was ist Ihr "falscher" Fall? –

+1

Hast du noch etwas anderes? –

+0

nicht in der Konsole anzeigen. Nein, ich habe kein anderes –

Antwort

0

Nein, es gibt keine Möglichkeit, eine wenn Aussage kompakter als zu machen:

if (printInConsole) Debug.Log("Starting and printing..."); 

eine besseren visuelle Art und Weise, wie "Rahul "weist darauf hin, dass mehr lesbar ist:

if (printInConsole) 
    Debug.Log("Starting and printing..."); 

As" Genos "erwähnt, ist nicht korrekt, einen C# kompakten ternären Operator wie beispielsweise zu verwenden:

printInConsole ? Debug.Log("Starting and printing..."); 

Weil es braucht einen zweiten else Ausdruck.

Es ist möglich, es innerhalb der Funktion zu tun, aber das Ergebnis ist nicht kompakter, einfacher oder lesbarer.:

Debug.Log(printInConsole ? "Running and printing..." : "\n"); 

itsme86“ und meine konventionelle Lösung ist eine spezielle kompakte Funktionsmethode zu erstellen. Auf diese Weise ist die aufrufende Funktion kompakter.

Mss("Starting and printing..."); 

In meinem Fall die vollständige Codebeispiel Unity wird:

public bool printInConsole; 

void Start() 
{ 
    Mss("Starting and printing..."); 
} 

private void Mss(string consoleMessage) 
{ 
    if (printInConsole) 
     Debug.Log(consoleMessage + "\n"); 
} 

Eine andere Lösung eine benutzerdefinierte Makro an eine Tastatur-Taste, um ausdruckt zuzuordnen ist:

if (printInConsole) 
    Debug.Log("" + "\n"); 

Bitte Da ich kein Engländer bin, bitte ich dich, meine Antwort zu verbessern.

1

In Ihrem Fall, da Sie nur drucken möchten, wenn die Bedingung trifft, sind Sie gut mit if Block und es gibt keine Notwendigkeit, ternären Operator zu verwenden.

if (printInConsole) 
    Debug.Log("Starting and printing..."); 
-4
if(printInConsole)?Debug.Log("Starting and printing..."): _you_else_condition_ 
+0

'if (printInConsole)' ????? – Rahul

+0

Sie mischen VB.NET Ternäroperator Syntax mit C#. UND, das OP erklärte klar, wie vor 7 Minuten, dass er keine "sonst" Bedingung hat. UND 'Debug.Log' gibt nichts zurück, daher wird das nicht kompiliert. –

+0

Diese Antwort gibt keine Fehlermeldung: Fehler CS1525: Unerwartetes Symbol "?" –

1

Wenn Sie mehrere Dinge haben möchten Sie sich anmelden und Sie wollen nur das vermeiden, „wenn/log“ -Zyklus, könnten Sie eine Methode erstellen:

private void LogIt(string msg) 
{ 
    if (printInConsole) 
     Debug.Log(msg); 
} 

Dann würden Sie rufen Sie einfach LogIt() jedes Mal an, wenn Sie sich anmelden wollten.

+0

Das ist sicher trocken-er. –

1

TLDR Verwenden Sie das, wenn:

if (printInConsole) Debug.Log("Starting and printing..."); 

Die Syntax eines ternären Ausdruck in C# ist wie folgt:

condition ? first_expression : second_expression; 

In Ihrem Szenario der ternäre Operator kann nicht verwendet werden, da:

  1. Es erfordert zwei Ausdrücke: eine für den Fall, dass die conditiontrue (first_expression) und ander ist r eins für false (zweiter_Ausdruck).
  2. Ternäre Operatorausdrücke müssen einen Wert zurückgeben, und Debug.Log() gibt void zurück.

Sie könnten ein paar verrückte Art und Weise für die Montage Ihrer Logik in einem ternären Operator erfinden, wie das Einwickeln der Debug.log() Anruf in einem Action delegieren, aber das wäre Verschwendung, da der ganze Sinn eines ternären Operator Ihren Code machen einfacher ...