Autor |
Beitrag |
lapadula
Beiträge: 180
Erhaltene Danke: 10
|
Verfasst: Fr 24.06.22 10:03
Wie kann ich in VB den Elvis / Ternary Operator nutzen?
Hallo ich habe eine alte ASP.NET Anwendung, wo ich den Ternary Operator in der Code-Behind nutzen möchte.
Leider bekomme ich beim Aufruf der Page eine Fehlermeldung, die besagt, dass ich "?" nicht nutzen darf (Error: "? cannot be used here").
Ich habe dann irgendwo gelesen, dass ich Roslyn und Microsoft.CodeDom.Providers.DotNetCompilerPlatform installieren soll, müsste das vb nicht schon längst unterstützen.
Ich möchte das gleiche was typescript kann: TypeScript 3.7: Optional Chaining
Also Dim stringValue = If(Object?.name?.name1, "")
Moderiert von Th69: Code-Tags hinzugefügt
Moderiert von Th69: URL-Titel hinzugefügt
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 24.06.22 10:25
Laut Doku so: ?. und ?() nullbedingte Operatoren (Visual Basic).
Was das jetzt mit dem ternary Operator oder dem Iff (den meinst du, nicht if, oder?) hab ich nicht verstanden.
Es sollte einfach Dim stringValue = Object?.name?.name1 sein.
Wobei dein Beispielnaming mich verwirrt. Ein Property name an etwas das Object heißt die eine Property name1 hat? Mag nur ein Beispiel sein klingt aber falsch.
Moderiert von Th69: URL-Titel hinzugefügt
Moderiert von Th69: Code-Tags hinzugefügt
Für diesen Beitrag haben gedankt: lapadula
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 24.06.22 10:36
Verwendest du noch eine ältere VB.NET-Version? Denn laut Null conditional operator kam dies ab Version 14 (d.h. mit Visual Studio 2015) hinzu.
Ansonsten klassisch:
VB.NET 1:
| If Object IsNot Nothing AndAlso Object.Name IsNot Nothing Then |
Für diesen Beitrag haben gedankt: lapadula
|
|
lapadula
Beiträge: 180
Erhaltene Danke: 10
|
Verfasst: Fr 24.06.22 10:43
Hallo, das ist ein Webservice den ich nutze, ich hab davon automatisch Klassen anlegen lassen über "add Service Reference".
Das Ding heißt nicht Object, sondern Person ^^
Ich wusste nicht die genaue Bezeichnung. In der Doku steht aber nicht, ab wann es verfügbar ist oder bin ich blind.
Ich bin vor kurzem umgestiegen von Visual Studio 2015 auf 2022, habe auch schon probiert die Framework-Version zu erhöhen, momentan ist das die 4.5.1
Leider bringt das alles nichts, es gibt trotzdem noch die Meldung:
Zitat: | Kompilierungsfehler
Beschreibung: Fehler bei der Kompilierung einer Ressource, die zur Verarbeitung dieser Anforderung erforderlich ist. Überprüfen Sie die folgenden spezifischen Fehlerdetails, und ändern Sie den Quellcode entsprechend. |
Zitat: | Compilerfehlermeldung
BC36637: An dieser Stelle darf das Zeichen "?" nicht verwendet werden. |
Ich möchte das Prüfen jeder einzelnen Property per IsNot Nothing verhindern, weil das doch unübersichtlich wird.
Moderiert von Th69: Code-Tags hinzugefügt
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 24.06.22 10:47
Schau mal in die zugehörige ".vbproj"-Datei: Select the Visual Basic language version
Für diesen Beitrag haben gedankt: lapadula
|
|
lapadula
Beiträge: 180
Erhaltene Danke: 10
|
Verfasst: Fr 24.06.22 11:02
Ich habe keine .vbproj Datei, weil das eine Webanwendung ist, mit web.config.
In dem Fall müsste ich ja Compiler per NuGet laden, oder (Microsoft.CodeDom.Providers.DotNetCompilerPlatform)
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 24.06.22 11:49
Für diesen Beitrag haben gedankt: lapadula
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 24.06.22 11:53
So ein Projekt wo man den Sourcecode deployed und erst on the-fly auf dem WebServer compiliert wird ?
Da konnte man die Sprachen mischen. Schreib einfach die Klassen die häßlich sind von VB in C# um. Der Server kompiliert das schon passend
Für diesen Beitrag haben gedankt: lapadula
|
|
lapadula
Beiträge: 180
Erhaltene Danke: 10
|
Verfasst: Fr 24.06.22 12:27
Ich bekomme nach der Installation der Packages nun beim Start folgende Meldung:
Quelltext 1:
| BC2014: the value 'default' is invalid for option 'langversion' |
Lieft wohl an dem Eintrag für vb langversion:default, wenn ich da 6 Eintrage, dann meckert der, dass 6 ungültig sei.
Quelltext 1: 2: 3: 4: 5: 6:
| <system.codedom> <compilers> <compiler extension=".cs" language="c#;cs;csharp" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701;612;618" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <compiler extension=".vb" language="vb;vbs;visualbasic;vbscript" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008,40000,40008 /define:_MYTYPE=\"Web\" /optionInfer+" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </compilers> </system.codedom> |
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 24.06.22 13:11
Hast du schon 15.0 oder latest probiert (wie in dem von mir verlinkten SO-Thema)?
Für diesen Beitrag haben gedankt: lapadula
|
|
lapadula
Beiträge: 180
Erhaltene Danke: 10
|
Verfasst: Fr 24.06.22 13:21
Ja, der meldet dann, dass die 15 ungültig ist...
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 24.06.22 13:40
Hmh. Das er 6 nicht will ist verständlich aber 15 sollte gehen. Siehe /langversion
Möglicherweise ist langversion:latest eine Option.
Welcher Compiler liegt den da rum wo tatsächlich kompiliert wird? Hab leider vergessen wie das genau funktioniert Dort sollte vermutlich das passende SDK existieren und über den Pfad gefunden werden müssen damit die nötigen Versionen auch bekannt sind. Wenn da der alte Compiler von der ursprünglichen Entwicklung gefunden wird sind alle späteren Version vermutlich unbekannt. Dann sollte zwar latest gehen aber ist dann vermutlich immer noch eine zu alte Version.
Moderiert von Th69: URL-Titel hinzugefügt
Moderiert von Th69: Code-Tags hinzugefügt
Für diesen Beitrag haben gedankt: lapadula
|
|
lapadula
Beiträge: 180
Erhaltene Danke: 10
|
Verfasst: Fr 24.06.22 13:58
Konnte das in der developer console folgendermaßen ermitteln:
Quelltext
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| Unterstützte Sprachversionen: default 1 2 3 4 5 6 7.0 7.1 7.2 7.3 8.0 9.0 10.0 (default) latestmajor preview latest |
Obwohl da default und latest unterstützt wird hat er jetzt nur "10" akzeptiert.
Ich denke ich werde es doch nicht tun, weil wir auch noch Selbsthoster haben und ich kann die Probleme schon riechen.
Habe jetzt alles mit NotIs Nothing zugekleistert.
Trotzdem danke für die Hilfe, ich werde nochmal reinschauen wie es geht, wenn ich das beim nächsten Mal probiere
Moderiert von Th69: Code-Tags hinzugefügt
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 24.06.22 14:03
Das ist ja auch der C#-Compiler (csc)!
Du mußt "vbc" aufrufen...
|
|
lapadula
Beiträge: 180
Erhaltene Danke: 10
|
Verfasst: Fr 24.06.22 14:21
Stimmt, folgendes kommt dabei raus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Unterstützte Sprachversionen: default 9 10 11 12 14 15 15.3 15.5 16 16.9 (default) latest |
15 wollte er aber nicht...
|
|