myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Delegaten - Ohne else keine zugewiesene Variable
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Delegaten - Ohne else keine zugewiesene Variable

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
App App ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-987.gif


Dabei seit: 15.01.2018
Beiträge: 28
Entwicklungsumgebung: Visual Studio Community 2017


App ist offline

Delegaten - Ohne else keine zugewiesene Variable

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,
ich habe heute etwas geübt und bin auf etwas, aus meiner Sicht, merkwürdiges gestoßen.
Schreibt man folgenden Code:

C#-Code:
using static System.Console;

public delegate double MyDelegate(double value1, double value2);
        static void Main(string[] args)
        {
            MyDelegate bezeichner;
            WriteLine("Einführungstext");
            Console.Write("Erste Zahl: ");
            double input1 = Convert.ToDouble(ReadLine());
            Console.Write("Zweite Zahl: ");
            double input2 = Convert.ToDouble(ReadLine());
            Console.WriteLine("Soll subtrahiert oder addiert werden? A für Addition, S für Subtraktion.");
            string input3 = ReadLine().ToUpper();
            if (input3 == "A")
            {
                bezeichner = Klasse.Addieren;
            }
            else if (input3 == "S")
            {
                bezeichner = delegate (double x, double y)
                {
                    return x - y;
                };
            }
            /*else
            {
                WriteLine("Ungültige Eingabe");
                ReadKey();
                return;
            } */

            double ergebnis = bezeichner(input1, input2);
            WriteLine($"Ergebnis: {ergebnis}");
            ReadKey();

erscheint bei verwendung des Delegaten bezeichner eine Fehlermeldung:

Fehlermeldung:
Fehler CS0165 Verwendung der nicht zugewiesenen lokalen Variablen "bezeichner".

Die derzeitige Lösung, um das zu beheben, ist den auskommentierten Code zu verwenden.

Warum muss ich das else geschrieben haben, damit der Delegat normal ausgeführt werden kann?
21.02.2018 17:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Palin Palin ist männlich
myCSharp.de-Mitglied

Dabei seit: 22.08.2011
Beiträge: 1.065
Entwicklungsumgebung: VB.net


Palin ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das Liegt am return.

Durch das return im den else Block wird sichergestellt das der Delegate nicht ausgeführt wird wenn er nicht zugewiesen wurde.
21.02.2018 17:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
CoLo
myCSharp.de-Mitglied

Dabei seit: 25.09.2009
Beiträge: 215


CoLo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Palin war schneller ....

Hier meine Antworten:

C#-Code:
MyDelegate bezeichner; //hier hast du "bezeichner" nichts zugewiesen
MyDelegate bezeichner = null; //hier hast du "bezeichner" den null-Wert zugewiesen

//--------------------------------------

MyDelegate bezeichner;
if (input3 == "A")
{
    bezeichner = Klasse.Addieren;
}
else
{
    WriteLine("Ungültige Eingabe");
    ReadKey();
    return;
}

double ergebnis = bezeichner(input1, input2);
//Der Compiler erkennt, dass die Variable zugewiesen wird, oder Du rausgehst.


//--------------------------------------


MyDelegate bezeichner;
if (input3 == "A")
{
    bezeichner = Klasse.Addieren;
}

double ergebnis = bezeichner(input1, input2);
//Der Compiler erkennt, dass wenn input3 != "A" ist, dass dann bezeichner nichts (noch nicht mal der null-Wert) zugewiesen ist.


//--------------------------------------


MyDelegate bezeichner = null;
if (input3 == "A")
{
    bezeichner = Klasse.Addieren;
}

double ergebnis = bezeichner(input1, input2);
//Der Compiler erkennt, dass Du immer was zugewiesen hast (Klasse.Addieren oder null-Wert) und meckert nicht. Obwohl eine NullReferenceException ausgelöst werden kann.
21.02.2018 18:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Monate.
Der letzte Beitrag ist älter als 7 Monate.
Antwort erstellen


© Copyright 2003-2018 myCSharp.de-Team. Alle Rechte vorbehalten. 24.09.2018 07:38