2016-10-26 3 views
0

Also versuche ich einen Code mit & & zu machen. Aber als ich das eintrug, hieß es, dass ich den Operanden nicht anwenden konnte.Alternative zu Operand && (C#)

Im Einzelnen heißt es: Operator „& &“ kann nicht auf Operanden des Typs ‚Server.Enums.PokemonType‘ angewendet werden, und ‚Server.Enums.PokemonType‘

Ich brauche aber der Lage sein, verlinken Diese zwei Dinge, so kann ich den Code zwei PokemonType s machen. Gibt es also eine Alternative oder einen Workaround, um nicht in der Lage zu sein, & & zu verwenden?

Wenn Sie es brauchen, das ist mein Code:

case 225: 
{ 
    //Flying Press -- INCOMPLETE, needs Flying-type 
    setup.Move.Element = Enums.PokemonType.Fighting && setup.Move.Element = Enums.PokemonType.Flying; 
    if (setup.Defender.VolatileStatus.GetStatus("Minimize") != null) 
    { 
     setup.Multiplier *= 2; 
     setup.Move.Accuracy = -1; 
    } 
} 
break; 
+2

So funktionieren Typen und Operatoren nicht. Sie benötigen entweder eine Sammlung oder eine Bitmaske. – SLaks

+0

Ich denke, Sie versuchen wahrscheinlich Folgendes zu tun: 'setup.Move.Element = Enums.PokemonType.Fighting | Enums.PokemonType.Flying; 'Das würde sowohl' Fighting' als auch 'Flying' setzen. –

+1

Sie müssen Ihre Enum ändern, um auch die Kominationen zu haben, der Punkt einer Enum ist, dass es aufzählbar ist, und dass nur ein Wert von einer Eigenschaft zu einer Zeit –

Antwort

4

Das System definiert && Operator unterstützt nur boolean Operanden. Der Operator & funktioniert für Enums (weil er auch für alle Integer-Typen funktioniert, auf denen die Enums basieren). Wenn Sie eine Enumeration haben möchten, die die Kombination von zwei Flag-Werten darstellt, dann wollen Sie natürlich OR zusammen (unter Verwendung von |), nicht UND sie zusammen.

+0

Ich tat das, aber jetzt bekomme ich einen Fehler, der sagt "Die linke Seite einer Zuweisung muss eine Variable, Eigenschaft oder Indexer sein". Würde es Ihnen etwas ausmachen zu erklären, was das bedeutet? ^^; Aber ja, ich versuche die Enums zu kombinieren. Machen Sie beide für diesen Fall gelten.Der Zug "Flying Press" ist sowohl Kampf- als auch Flugtyp, also versuche ich herauszufinden, wie ich das machen würde. – Tapu

+0

@Foxwells Das bedeutet, dass Sie versuchen, einem Wert einen Wert zuzuweisen, dem kein Wert zugewiesen werden kann. – Servy

+0

Ah ... macht Sinn. Ich habe versucht, was jemand anderes gesagt hat (was ich denke, dass du es beschrieben hast) und hat 'setup.Move.Element = Enums.PokemonType.Fighting | Enums.PokemonType.Flying; ', aber ich denke nicht, dass es richtig funktioniert. Es ist nicht auf Normal-Typen super-wirksam, aber ist nicht sehr effektiv auf Gift-Typen. Aber es ist auch super effektiv auf einem Grass/Flying-Typ @ __ @ Es ist sehr merkwürdig. – Tapu

3

Um einer enum-Variablen mehrere Werte hinzuzufügen, müssen Sie die enum mit dem Attribut [Flags] deklarieren.

So Ihre Enum sei:

[Flags] 
public enum PokemonType 
{ 
    Fighting = 1 << 0, 
    Flying = 1 << 1, 
    Normal = 1 << 2, 
    Dragon = 1 << 3, 
} 

Define enumeration constants in powers of two, das heißt, 1, 2, 4, 8, und so weiter. Dies bedeutet, dass sich die einzelnen Flags in kombinierten Aufzählungskonstanten nicht überschneiden

Dann zuweisen mit Enums.PokemonType.Fighting | Enums.PokemonType.Flying, so dass es möglich ist, alle Werte zu verfolgen, die ihm später zugewiesen werden.

+1

Sie müssen nicht das Attribut "Flags" verwenden. Es ist * nett *, und es wird dazu beitragen, dass einige der enum-Hilfsmethoden besser funktionieren, aber es ist nicht unbedingt notwendig. All das ist notwendig, dass jeder Enum-Wert eine Zweierpotenz ist. – Servy

+0

Ich äh ... habe keine Ahnung, was das bedeutet, aber es hat nicht funktioniert. – Tapu

+1

@ Foxwells vielleicht müssen Sie zurück gehen und lernen einige Grundlagen sowie einige Forschung darüber, was es ist, dass Sie nicht verstehen, das ist ziemlich einfach Antwort btw – MethodMan