2016-10-28 5 views
-2

konvertieren Ich habe Code, der eine Klasse verwendet, die von Java mit IKVM für .NET konvertiert wurde. Also mein Codebeispiel verwendet VAR, wenn die Klasse instanziiert wird, wie zum Beispiel:wie die Verwendung von VAR zu expliziten Typ in C#

var Something = new OriginallyFromJavaClass("c:\ReadInThisFile.txt"); 

Dann Methoden dieser Klasse etwas zu tun mit dieser Textdatei wie:

var analyze = OriginallyFromJavaClass.method1(whatever); 

Beachten Sie, dass diese anderen Verwendungen der Klasse tun NICHT "Something" referenzieren, sondern nur den Java-Klassennamen ohne das "neue" Wort aufrufen.

Das Problem ist, dass das Lesen der Textdatei dauert einmal 30 Sekunden, also möchte ich es nur einmal in meiner WinForms-Anwendung und dann rufen Sie die anderen Methoden innerhalb einer Schaltfläche klicken. Aber wenn ich die obige Codezeile auf meine Klassenebene verschiebe, sodass ich die TXT-Datei nur einmal öffnen muss, schlägt der C# -Compiler fehl, weil VAR-Typen auf Klassenebene nicht zugelassen sind. Ich weiß grundlegend und aus GetType, um diese Variable auszuwerten, dass es eine Klasse ist. Also, wie würde ich das oben genannte mit expliziten Typen restrukturieren und wo ich die Klasse (also so, dass sie meine TXT-Datei liest) nur einmal instanziieren?

+0

Welcher Typ ist es? Das ist der Typ, der es ist. Benutze diesen Typ. Der Code sagt 'new OriginalFromJavaClass()'. Das ist der Typ, der es ist. Das ist es Typ. Der Typ eines Objekts ist die Klasse, die es ist. Die Klasse ist der Typ. Deklarieren Sie das Feld als diesen Typ. Welcher andere Typ könnte es sein? Sieht es so aus, als ob Sie dort eine ganze Zahl erstellen? ** Hast du * irgendetwas * versucht? ** –

+0

'OriginalFromJavaClass Something = neu OriginalFromJavaClass (@" c: \ ReadInThisFile.txt ");' – itsme86

+0

Finde einfach heraus, welchen Typ die Variable hat und ersetze 'var' mit was auch immer dein Typ ist ...? d. h. 'var Something =' würde 'OriginalFromJavaClass Something =' – nhouser9

Antwort

1

OriginallyFromJavaClass Something = new OriginallyFromJavaClass("c:\ReadInThisFile.txt"); 
1

Nun, versuchen var infers the type nur Sie sollten in Ordnung sein, wenn Sie nur, anstatt den tatsächlichen Typ deklarieren.

TypeClass something = new TypeClass("c:\ReadInThisFile.txt"); 
+1

Dies ist keine Antwort. Es sollte ein Kommentar sein. Sie können Kommentare bei 50 rep hinterlassen, glaube ich. – itsme86

2

var ist einfach Zucker für sich nicht wie

OriginallyFromJavaClass Something = new OriginallyFromJavaClass("c:\ReadInThisFile.txt"); 

so können Sie

A a = new A() 

statt

var a = new A() 
+0

Außer wenn Sie 'var' verwenden, übernimmt VS intellisense die Mitglieder zur Entwicklungszeit nicht.Ansonsten ist 'var' nett, süß und dandy. – ajeh

+4

@ajeh, das ist nicht wahr, VS intellisense verhält sich in genau der gleichen Weise, ob Sie var verwenden oder nicht – Evk

+0

Funktioniert nicht für mich. Keine Ahnung warum. – ajeh

0

Obwohl var einfach Syntax wiederholen zu müssen ist Zucker, um ein bisschen Code zu reinigen. Manchmal kann ein Fehler auftreten, weil das Ergebnis der CLR im Vergleich zu dem, was zurückgegeben wird, tatsächlich falsch ist. Manchmal ist es also ideal, explizit zu sein.

Ansonsten ist es ideal für kurze Hand:

Dictionary<int, List<Sample>> example = new Dictionary<int, List<Sample>>(); 
var example = new Dictionary<int, List<Sample>>(); 

Also, solange es richtig die Art folgert, es ist die gleiche wie explizite Deklaration ist. Hoffentlich klärt das dein Problem auf.

Verwandte Themen