Autor Beitrag
lapadula
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: 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 user profile iconTh69: Code-Tags hinzugefügt
Moderiert von user profile iconTh69: URL-Titel hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 user profile iconTh69: URL-Titel hinzugefügt
Moderiert von user profile iconTh69: Code-Tags hinzugefügt

Für diesen Beitrag haben gedankt: lapadula
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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:
ausblenden VB.NET
1:
If Object IsNot Nothing AndAlso Object.Name IsNot Nothing Then					

Für diesen Beitrag haben gedankt: lapadula
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: 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 user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Fr 24.06.22 11:02 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Schau mal in die zugehörige ".vbproj"-Datei: Select the Visual Basic language version

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 24.06.22 11:49 
Achso, ja - dann mittels "web.config" und den NuGet-Packages: How can I use the latest VB.NET language level in an ASP.NET web site project?

Für diesen Beitrag haben gedankt: lapadula
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 :D

Für diesen Beitrag haben gedankt: lapadula
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Fr 24.06.22 12:27 
Ich bekomme nach der Installation der Packages nun beim Start folgende Meldung:
ausblenden 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Fr 24.06.22 13:21 
Ja, der meldet dann, dass die 15 ungültig ist...
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 user profile iconTh69: URL-Titel hinzugefügt
Moderiert von user profile iconTh69: Code-Tags hinzugefügt

Für diesen Beitrag haben gedankt: lapadula
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Fr 24.06.22 13:58 
Konnte das in der developer console folgendermaßen ermitteln:
ausblenden Quelltext
1:
csc -langversion:?					

ausblenden 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 :D

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 24.06.22 14:03 
Das ist ja auch der C#-Compiler (csc)!
Du mußt "vbc" aufrufen...
lapadula Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 180
Erhaltene Danke: 10



BeitragVerfasst: Fr 24.06.22 14:21 
Stimmt, folgendes kommt dabei raus:

ausblenden 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...