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

Printed on: April 20, 2024 at 04:04 o'clock

Mitglied: 132692
132692 Mar 25, 2017 updated at 07:10:32 (UTC)
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.
Member: mayho33
mayho33 Mar 25, 2017 at 09:54:56 (UTC)
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 Mar 25, 2017 updated at 10:02:52 (UTC)
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.
Member: mayho33
mayho33 Mar 25, 2017 at 10:06:23 (UTC)
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 Mar 25, 2017 updated at 10:13:34 (UTC)
Goto Top
Mitglied: 132692
Solution 132692 Mar 25, 2017 updated at 14:52:56 (UTC)
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){
       // ....
    }
Member: mayho33
mayho33 Mar 25, 2017, updated at Apr 05, 2017 at 09:04:53 (UTC)
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