Enum-Problem

  • C#

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Adde.

    Enum-Problem

    Hi, ich bin gerade dabei, ein Programm zu schreiben, welches Outlook Kontakte in eine .txt Datei schreiben soll.
    Beim Auslesen der Eigenschaften wird FAST alles als String übergeben. Jedoch das Ein oder Andere auch als enum. Hierbei weiß ich jedoch nicht wie ich das verwenden soll. :S

    Hier mal ein Code Snippet :
    Spoiler anzeigen

    C#-Quellcode

    1. string HomeAddressPostOfficeBox = ""; // Postfach privat
    2. if (itmContacts.HomeAddressPostOfficeBox != null)
    3. {
    4. HomeAddressPostOfficeBox = itmContacts.HomeAddressPostOfficeBox;
    5. }
    6. /*enum Importance = ""; // Priorität
    7. if (itmContacts.Importance != null)
    8. {
    9. Importance = itmContacts.Importance;
    10. }*/
    Hallo @Adde,

    Sorry, aber wir brauchen mehr Infos. Sag uns mal, was für Inputs du zur Verfügung hast und was du als Output haben willst - wie bei einer Blackbox. Wir helfen dir dann, diese Blackbox zu füllen.

    Grüsse,

    Higlav
    Ein Enum ist aber ein eigener Datentyp.
    In eine Textbox kann man aber nur Strings schreiben.

    Also mit Enum.Tostring und Enum.Parse kann man das zur Not umwandeln, ist aber sehr schlechter Stil.

    Vor allem aber: Enum gibt es gar nicht, sondern es gibt nur von Enum abgeleitete Typen. Hier kommt man also nicht weiter, bis du den genauen Typen angeben kannst, den du bislang nur so verallgemeinert als "Enum" bezeichnet hast.
    Outlook gibt fast alle Eigenschaften als Strings aus, dise sind dementsprechend einfach zu speichern.
    Ich muss quasi den Wert für diese Eigenschaft so in meiner .txt abspeichern, dass er beim Auslesen wieder richtig als Kontakteigenschaft übertragen wird.
    Hierbei machen diese beiden Eigschaften Probleme:

    Importance: msdn.microsoft.com/en-us/libra…ntactitem.importance.aspx
    wobei hier angegeben wird, dass man sie als Enumeration behandeln soll: msdn.microsoft.com/en-us/libra…outlook.olimportance.aspx

    Gender: msdn.microsoft.com/en-us/libra…._contactitem.gender.aspx
    wobei hier angegeben wird, dass man sie als Enumeration behandeln soll: msdn.microsoft.com/en-us/libra…rop.outlook.olgender.aspx

    Hofe damit konnte ich euch mein Problem näher bringen
    Der Punkt ist, du solltest dir das Problem selbst näher bringen.
    Ich weiß jetzt den genauen Datentyp - aber du musst ja damit umgehen.

    Also musst du Grundlagen lernen, was eine Enumeration ist. Lad dir das Löffelmann2005-Buch runter und studiere das hervorragende Kapitel zu Enumerationen.
    Dann solltest du auch den genauen Datentyp bei Microsoft selbst nachlesen können (statt nur andere da hin-verlinken). Und dann weißt du die Werte auch nach String zu konvertieren und zurück.
    Und du hast es mit deinem auskommentierten Code oben versucht? Wie geht's mit dem hier?(Achtung: Frei getippelt)

    C#-Quellcode

    1. OlImportance imprtnc = itmContacts.Importance;
    2. //respektive
    3. OlGender gndr = itmContacts.Gender;
    Okay danke für den Buch Tipp werde mir es auf jeden Fall anschauen.
    Ich weiß dass das nicht die gute Art ist, und es tut mir auch Leid, jedoch habe ich in meinem C# Buch nichts weiter herausgefunden und Google hat ir auch nicht wirklich weitergeholfen, da es dort viele Halbwissende gibt die ihren Senf zum Besten geben.
    Werde mir das Löffelmann2005 herunterladen. Danke nochmal

    EDIT: @ErfinderDesRades meinst du das Buch zu Visual Basic 2005 ?

    EDIT 2.0: @Higlav das Problem ist das OlImportance, insofern auch OlGender kein Typ der Klasse Outlook sind. :/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Adde“ ()

    Hi, habe nun eine Lösung für das Problem gefunden.

    Jedoch wird mir Outlook.OlGender nach dem if immer noch rot angestrichen und im mouse over steht dann: OlGender ist ein "Typ" und im angegebenen Kontext nicht gültig.
    Was muss ich ändern ?

    Arbeite jetzt mit den von Outlook benutzten Begriffen und habe die Gender Typen nach der Outlook Vorgabe indexiert.

    Spoiler anzeigen

    C#-Quellcode

    1. Outlook.OlGender Gender = Outlook.OlGender.olUnspecified;
    2. int GenderIndex = 0;
    3. if (Outlook.OlGender != Outlook.OlGender.olFemale)
    4. {
    5. Gender = Outlook.OlGender.olMale;
    6. GenderIndex = 2;
    7. }
    8. else if (Outlook.OlGender != Outlook.OlGender.olMale)
    9. {
    10. Gender = Outlook.OlGender.olFemale;
    11. GenderIndex = 1;
    12. }
    13. else if (Outlook.OlGender != Outlook.OlGender.olFemale && Outlook.OlGender.olMale)
    14. {
    15. Gender = Outlook.OlGender.olUnspecified;
    16. GenderIndex = 0;
    17. }

    Jup, habe das so gemacht :)

    Außerdem ist mir aufgefallen, dass es mit

    C#-Quellcode

    1. !=
    viel umständlicher ist als einfach mit

    C#-Quellcode

    1. ==
    .

    Hier der Code (falls jemand dasselbe Problem hat), werde auch nochaml berichten ob alles geklappt hat, wenn das Programm fertig ist :)

    Und danke für die tolle Hilfe :thumbsup:

    Code Snippet:

    Spoiler anzeigen

    C#-Quellcode

    1. Outlook.OlGender Gender; // Geschlecht: GenderIndex 0 = Unspecified ; GenderIndex 1 = Female ; GenderIndex 2 = Male
    2. Gender = Outlook.OlGender.olUnspecified;
    3. int GenderIndex = 0;
    4. if (Gender == Outlook.OlGender.olFemale)
    5. {
    6. Gender = Outlook.OlGender.olFemale;
    7. GenderIndex = 1;
    8. }
    9. else if (Gender == Outlook.OlGender.olMale)
    10. {
    11. Gender = Outlook.OlGender.olMale;
    12. GenderIndex = 2;
    13. }
    14. else
    15. {
    16. Gender = Outlook.OlGender.olUnspecified;
    17. GenderIndex = 0;
    18. }