Rückgabewerte von Funktionen
Hallo Forum,
ich schreibe gerade in VB.NET eine Funktion, die als Rückgabewert einen Double-Wert zurückliefert. Wenn jedoch vom Nutzer unzulässige Werte übergeben werden, kann dieser Wert nicht berechnet werden. Ich würde dann gern eine Fehlermeldung zurückliefern. Ist es in VB.NET machbar, als Rückgabeformat Double und String parallel zu definieren? Wenn ja, wie mache ich das am besten?
Vielen Dank im voraus,
M. Born
ich schreibe gerade in VB.NET eine Funktion, die als Rückgabewert einen Double-Wert zurückliefert. Wenn jedoch vom Nutzer unzulässige Werte übergeben werden, kann dieser Wert nicht berechnet werden. Ich würde dann gern eine Fehlermeldung zurückliefern. Ist es in VB.NET machbar, als Rückgabeformat Double und String parallel zu definieren? Wenn ja, wie mache ich das am besten?
Vielen Dank im voraus,
M. Born
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 266466
Url: https://administrator.de/contentid/266466
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
überprüfe bevor du die die Eingaben an die Funktion übergibst die Eingaben des Users auf Gültigkeit, z.B. mit isNumeric()!
Man kann aus deiner Funktion nur einen Wert des Typs double zurückgeben. Da müsstest du schon den Datentyp ändern, z.B auf eine Collection oder ähnliches in der du einen Vermerk darauf setzt.
Alternativ kannst du natürlich auch eine Exception aus deiner Funktion werfen, welche du mit einem Try-Catch außerhalb der Funktion abfängst.
Gruß jodel32
überprüfe bevor du die die Eingaben an die Funktion übergibst die Eingaben des Users auf Gültigkeit, z.B. mit isNumeric()!
Man kann aus deiner Funktion nur einen Wert des Typs double zurückgeben. Da müsstest du schon den Datentyp ändern, z.B auf eine Collection oder ähnliches in der du einen Vermerk darauf setzt.
Alternativ kannst du natürlich auch eine Exception aus deiner Funktion werfen, welche du mit einem Try-Catch außerhalb der Funktion abfängst.
Gruß jodel32
Moin,
um das zu realisieren gibt's 2 Möglichkeiten:
1. Du gibst eine Datenstruktur (eine Klasse) zurück, mit einem String (für evtl. Fehlermeldungen) und einem Double
2. Du löst im Fehlerfall in der Funktion per "Throw" eine Exception aus die vom aufrufenden Code per Try..:Catch entsprechend behandelt wird
lg,
Slainte
um das zu realisieren gibt's 2 Möglichkeiten:
1. Du gibst eine Datenstruktur (eine Klasse) zurück, mit einem String (für evtl. Fehlermeldungen) und einem Double
2. Du löst im Fehlerfall in der Funktion per "Throw" eine Exception aus die vom aufrufenden Code per Try..:Catch entsprechend behandelt wird
überprüfe bevor du die die Eingaben an die Funktion übergibst
Naja, das will man aber nicht jedesmal machen,wenn dan die Func aufruft, oder? lg,
Slainte
Hallo Marco,
Ein Beispiel
Zum Overloading:
https://support.microsoft.com/en-us/kb/311330
Denke aber nicht das das für deinen Fall passend ist.
Grüße Uwe
Zitat von @MarcoBorn:
Das ist ja genau das, was ich will. Z.B. einen String im Erfolgsfall und Nothing bei einem Fehler.
dann machs doch einfach mit Object als Rückgabetyp da bist du flexibel, was den Rückgabewert betrifft.Das ist ja genau das, was ich will. Z.B. einen String im Erfolgsfall und Nothing bei einem Fehler.
Ein Beispiel
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim result As Object = DemoFunktion("xxx")
If result = Nothing Then
MsgBox("Kreiiiiiiiischhhhh")
Else
MsgBox(result)
End If
End Sub
Public Function DemoFunktion(parameter1 As String) As Object
Try
If parameter1 = "Hallo" Then
Return "Den String gebe ich zurück"
Else
Return Nothing
End If
Catch ex As Exception
Return Nothing
End Try
End Function
End Class
Zum Overloading:
https://support.microsoft.com/en-us/kb/311330
Denke aber nicht das das für deinen Fall passend ist.
Grüße Uwe
Hi Born!
Ich habe vor kurzem was ähnliches gebraucht in textBoxes bzw. ComboBoxes. Da lasse ich z.B. direkt bei der Eingabe nur bestimmte Sachen zu. Schau es dir doch einfach mal an ob es für dich brauchbar ist
Ich habe vor kurzem was ähnliches gebraucht in textBoxes bzw. ComboBoxes. Da lasse ich z.B. direkt bei der Eingabe nur bestimmte Sachen zu. Schau es dir doch einfach mal an ob es für dich brauchbar ist
internal static class TextControl
{
internal static void TextBox_AllowOnlyNumbers(TextBox textbox, object sender)
{
var t = (sender as TextBox).Text.ToCharArray();
int val;
if (t.Length > 0)
{
int CharLenght = Convert.ToInt32(t[t.Count() - 1]);
if (!int.TryParse(t[t.Count() - 1].ToString(), out val))
{
textbox.Text = textbox.Text.Substring(0, textbox.Text.Length - 1);
textbox.SelectionStart = textbox.Text.Length;
}
}
}
internal static void TextBox_ExcludeSpecificCharacters(TextBox textbox, object sender, string toExclude)
{
foreach (var item in toExclude)
{
var t = (sender as TextBox).Text.ToCharArray();
if (t.Length > 0)
{
int CharLenght = Convert.ToInt32(t[t.Count() - 1]);
if (t[t.Count() - 1].ToString() == item)
{
textbox.Text = textbox.Text.Substring(0, textbox.Text.Length - 1);
textbox.SelectionStart = textbox.Text.Length;
}
}
}
}
internal static void ComboBox_AllowOnlyNumbers(ComboBox combobox, object sender)
{
var t = (sender as ComboBox).Text.ToCharArray();
if (t.Length > 0)
{
int val;
int CharLenght = Convert.ToInt32(t[t.Count() - 1]);
if (!int.TryParse(t[t.Count() - 1].ToString(), out val))
{
combobox.Text = combobox.Text.ToString().Substring(0, combobox.Text.ToString().Length - 1);
combobox.SelectionStart = combobox.Text.Length + 1;
}
else
{
combobox.SelectionStart = combobox.Text.Length + 1;
}
}
}
internal static void ComboBox_ExcludeSpecificCharacters(ComboBox combobox, object sender, string toExclude)
{
foreach (var item in toExclude)
{
var t = (sender as ComboBox).Text.ToCharArray();
if (t.Length > 0)
{
int CharLenght = Convert.ToInt32(t[t.Count() - 1]);
if (t[t.Count() - 1].ToString() == item)
{
combobox.Text = combobox.Text.ToString().Substring(0, combobox.Text.ToString().Length - 1);
combobox.SelectionStart = combobox.Text.Length + 1;
}
else
{
combobox.SelectionStart = combobox.Text.Length + 1;
}
}
}
}
}