2017-11-04 1 views
0

Nachmittag -> Vormittag; Grundsätzlich habe ich ein Problem mit IEquatable, das sich in "Using System" und "Using System.Collection.Generic" befindet. Im Grunde ist es der Zweck dieser Aufgabe, den Benutzer eine Datenbank auswählen zu lassen und Eingaben zu senden; Ich habe sie die Eingabe über eine grundlegende Zeichenfolge, die ich getestet habe, und es funktioniert. Obwohl mein Problem rein visuell ist, scheinen sich auch die Daten in der Liste zu sammeln. Also, was passiert {HERE} nimmt die letzte Eingabezeichenfolge und kopiert es und sendet es erneut und kopiert die letzten paar Eingaben und sendet sie mit der neuen Eingabe; Das übernimmt die vorherigen Funktionen und verhält sich so, als wäre es eine Rekursionsmethode, von der ich persönlich nicht überzeugt wäre. enter image description hereEditorWindow: Eingabe mit rekursivem Ausgabefehler

internal class _Command : IEquatable<_Command> 
{ 
    public string _SQLiteCOMMAND { get; set; } 
    public int _SQLiteCOMMAND_CNT { get; set; } 
    public override string ToString() { return "Command Number : " + _SQLiteCOMMAND_CNT + "\n Command : " + _SQLiteCOMMAND; } 
    public override int GetHashCode() { return _SQLiteCOMMAND_CNT; } 
    public override bool Equals(object obj) 
    { 
     if (obj == null) return false; 
     _Command CMD_OBJ = obj as _Command; 
     if (CMD_OBJ == null) return false; 
     else return Equals(CMD_OBJ); 
    } 
    public bool Equals(_Command ETC) 
    { 
     if (ETC == null) return false; 
     return (this._SQLiteCOMMAND_CNT.Equals(ETC._SQLiteCOMMAND_CNT)); 
    } 
} 

Im Grunde, was ich getan haben, hier ist Setup eine IEquatable Tabelle, die meine Liste anstelle einer allgemeinen neuen String-Liste halten wird; was ich versucht habe, aber ich bekomme eine geringere und langsamere Antwort.

public void _SendQueryCOMMAND(int id) 
{ 
    _Database.Add(new _Command() { _SQLiteCOMMAND = _ConsoleCommandInput, _SQLiteCOMMAND_CNT = _CMDval+1 }); 
    _ConsoleLoggerUpdate(); 
} 

Dies ist ein Ausschnitt aus wie ich mein Befehl an die Datenbank senden, und es hat einen Ausgang, der mich so Welche Befehlsnummer zeigt, wenn ich 3 Befehle senden meine Es wird sagen, ich habe Befehle „3“ gesendet oder in persönliche Bezeichnung "2";

public void _ConsoleLoggerUpdate() 
{ 
    foreach (_Command _SQLiteCommand in _Database) 
    { 
     _ConsoleCommandInput += _SQLiteCommand + "\n"; 
    } 
} 

Dies ist, wie ich meine Daten-Format in die Liste mit einer foreach-Anweisung, die auf einer neuen Zeile jedes formatiert Befehl in dieser Liste hinzufügt.

_ConsoleCommandWindow = EditorGUILayout.TextArea(_ConsoleCommandInput, GUILayout.Width(position.width - 5), GUILayout.Height(75)); 

Dies ist, wie meine Daten in ein Fenster als meine Eingabedaten

public void _outputConsole(int id) 
{ 
    GUILayout.Label("Current Input Text :" + _ConsoleCommandInput); 
    GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); 

} 

für die Ausgabe

Dies wäre, wie ich meine Informationen

Ich habe formatiert formatiert ist und versucht Array ist mit und Listen über mindestens 50 verschiedene Möglichkeiten, die mir durch das Lesen der Dokumentation und sogar das Kopieren und Einfügen und dem Versuch, es zum Laufen zu bringen, einfallen könnten. Ich hatte immer das gleiche "rekursive" Problem, das ich gerade habe.

https://msdn.microsoft.com/en-us/library/x303t819(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

Antwort

0

stundenlang Nach bastelt landete ich und von Grund auf neu zu werden fustrated auf. Ich habe fast zwei Drittel der Arbeit, die ich in den letzten zwei Tagen geleistet habe, verschrottet und letztendlich meinen Fehler herausgefunden, als ich alles entfernte.

_CommandInputEntry = EditorGUILayout.TextField(_CommandInputEntry, GUILayout.Width(position.width - Screen.width/2.25f), GUILayout.Height(75)); 

Mein Eingabefehler war alles an der Vorderseite dieses als ich versuchte, den String und die Formel von „_CommandInputWindow“ bis „_CommandInputEntry“ zu trennen, wenn beide gewesen sein sollten oder die andere vollständig.

if (GUILayout.Button("Send Command")) { _CommandListEntry.Add(_CommandInputEntry); _consoleWindowMethod(1); } 

Statt eine komplexe Formel oder jede Art von Verfahren des Aufrufs ich eine einfache Liste und eine ziemlich grundlegende foreach-Anweisung am Ende, sondern ein komplexes rufende System zu haben, sobald Sie „Send Command“ getroffen, fügt die aktuelle Textile-Eingabe und fügt sie der Liste hinzu und ruft dann die Methode auf, die die letzte Zeichenfolge in der Liste anzeigt, die die folgende Eingabe wäre.

public void _consoleWindowMethod(int id) 
{ 
    foreach (string _command in _CommandListEntry) 
    { 
     GUILayout.Label("Command :" + _command); 
     GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); // Divider 
    } 
} 

Das ist eigentlich, wie ich meine Listenvariablen gespeichert habe; Ending ziemlich einfach!

private List<string> _CommandListEntry = new List<string>(); 
Verwandte Themen