mayho33
Goto Top

Methode multiple return values

Hallo Community,

ich habe wieder mal eine Frage und hoffe auf eure KnowHow!

Ich möchte eine Methode erstelle die mehr als ein Value zurückgeben kann und welche ich mit Intellisence auch auswählen kann. Etwa in dieser Form:


if(MyMetode() == Return.One | Return.Two & Return.Three)
{
    ...
    ...
}

Wie müsste ich das anstellen? Mir fehlt da leider jeder Ansatz. Warum eigentlich? z.B. dafür:
public static class Remove
{
    public static bool This(string fileOrDirectoryPath)
    {
        bool toReturn = false;
            if (File.GetAttributes(fileOrDirectoryPath) == FileAttributes.Directory && Directory.Exists(fileOrDirectoryPath))
            {
                Directory.Delete(fileOrDirectoryPath, true);
                toReturn = true;
            }
            if (File.GetAttributes(fileOrDirectoryPath) != FileAttributes.Directory && File.Exists(fileOrDirectoryPath))
            {
                File.Delete(fileOrDirectoryPath);
                toReturn = true;
            }
            return toReturn;
    }
}

Wäre Dankbar für ein paar Ansätze oder kleine Beispiele!

Grüße!

Mayho

Content-Key: 333172

Url: https://administrator.de/contentid/333172

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: 132692
132692 25.03.2017 aktualisiert um 08:10:32 Uhr
Goto Top
Moin,
erstell dir einfach ein Public enum in dem du die Werte angibst die zurückgegeben werden können, und gibst dann als Funktionsrückgabetyp die enum an.
In der Funktion gibst du dann jeweils einen der Enum-Werte zurück.

public enum WeekDays {Mon, Tue, Wed, Thu, Fri, Sat, Sun};  

public WeekDays WhatTheFuckWichWeekday(){
    // blablabla
    return WeekDays.Sat;
}

Alternativ geht natürlich auch eine struct wenn es komplexere Anforderungen sind.

Gruß p.
Mitglied: mayho33
mayho33 25.03.2017 um 10:54:56 Uhr
Goto Top
Hi pattern,

danke für den Tipp, aber das gibt auch nur 1 value zurück. Ich möchte mehrere Values abfragen können auf binär-Basis.

Wie in meinem Beispiel oben kann MyMethod() True sein, False und ...Nix weiter. Wäre aber toll wenn die Methode z.B. zurückgegeben
dass keine Fehler aufgetreten sind "und Daten gelöscht" wurden.

Grüße!

mayho
Mitglied: 132692
132692 25.03.2017 aktualisiert um 11:02:52 Uhr
Goto Top
Dann gib einfach eine List<T> des Enums aus oder ein Object oder wie ich oben geschrieben habe eine struct, wo ist das Problem?? Ich seh da keins wenn mehrere Rückgabewerte gefordert sind.
Bei Fehlern macht man ja normalerweise ein throw mit einer custom exception.
Mitglied: mayho33
mayho33 25.03.2017 um 11:06:23 Uhr
Goto Top
Es geht ja nicht darum einen Fehler abzufangen, sondern mehrere Values entsprechend der Frage oben zurückzugeben. Mit dem "|"- Operator.
Natürlich kann ich ein Tuple, Struct, Enum erstellen usw. Das lässt die Abfrage aber nicht funktionieren:

if(MyMethode() == KeineAhnung | NochImmerKeineAhnung | HastDuNeIdee)
{

}

Dachte eher an eine Interface, aber KA wie das aussehen müsste damit.
Mitglied: 132692
132692 25.03.2017 aktualisiert um 11:13:34 Uhr
Goto Top
Mitglied: 132692
Lösung 132692 25.03.2017 aktualisiert um 15:52:56 Uhr
Goto Top
Ok letzter Versuch, dann denke ich das was du suchst ist das [Flags] Attribut
http://stackoverflow.com/questions/8447/what-does-the-flags-enum-attrib ...

[Flags]
public enum MyEnum {
      IsDirectory = 1,
      IsFile = 2,
      NoFileOrDirectory = 4,
      IsError = 8
}

public void EinTest(){
    MyEnum test = MyEnum.IsError | MyEnum.NoFileOrDirectory;
    if((test & MyEnum.IsError) > 0){
       // ....
    }
Mitglied: mayho33
mayho33 25.03.2017, aktualisiert am 05.04.2017 um 11:04:53 Uhr
Goto Top
Howly Moly!!

Ich glaub das ist es! Wirklich nur ein Flag?? Du bist der Wahnsinn!

Bin gerade unterwegs. Gebe abrnds bescheid.

Gruß!

Mayho

EDIT

Super! Danke! @ pattern.

Funktioniert!! face-smile