Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Hilfe bei der Implementierung eines Interface
patrickheppler
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Hilfe bei der Implementierung eines Interface

beantworten | zitieren | melden

Hallo zusammen,
ich bin absolut neu in der C# Welt und auch nur Hobby-Entwickler. Um mich in C# und MVC einzuarbeiten möchte ich eins meiner bestehenden Projekte von Laravel zu .NET MVC portieren.
Mein Page Model nutzt unter Laravel ein Nested Set Package um die Seiten hierarchisch abzubilden. Hierfür habe ich auch schon ein Beispiel auf github gefunden https://github.com/joshcomley/EfCore.NestedSets

Ich habe mir also ein Interface angelegt.

using System.Collections.Generic;

namespace NestedSet.Interfaces
{

    public interface INestedSet<T, TKey, TNullableKey>
         where T : INestedSet<T, TKey, TNullableKey>
    {
        TKey Id { get; set; }
        T Parent { get; set; }
        TNullableKey ParentId { get; set; }
        int Level { get; set; }
        int Left { get; set; }
        int Right { get; set; }
        bool Moving { get; set; }
        T Root { get; set; }
        TNullableKey RootId { get; set; }
        List<T> Children { get; set; }
        List<T> Descendants { get; set; }
    }
}

Und dann ein Model erstellt

using NestedSet.Interfaces;
using System.Collections.Generic;

namespace NestedSet.Models
{

    public class Page : INestedSet<Page, Id, RootId>
    {
        public Id Id { get; set; }
        public RootId RootId { get; set; }
        public Page Parent { get; set; }
        public RootId ParentId { get; set; }
        public int Level { get; set; }
        public int Left { get; set; }
        public int Right { get; set; }
        public bool Moving { get; set; }
        public Page Root { get; set; }
        public List<Page> Children { get; set; }
        public List<Page> Descendants { get; set; }

    }
}



Mein Problem sind Id und RootId, die für mein Verständnis einem Integer entsprechen sollten. Ich habe keine Ahnung wie ich diese definieren muss.
Letztendlich sollte, da ich MySQL einsetze, folgendes möglich sein.

Page page = new Page();
page.RootId = 1; // Page mit der Id 1 soll der Root des Tree werden

Visual Studio Code hatte vorgeschlagen, Id und RootID als Klassen anzulegen.

using NestedSet.Interfaces;
using System.Collections.Generic;

namespace NestedSet.Models
{

    public class Page : INestedSet<Page, Id, RootId>
    {
        public Id Id { get; set; }
        public RootId RootId { get; set; }
        public Page Parent { get; set; }
        public RootId ParentId { get; set; }
        public int Level { get; set; }
        public int Left { get; set; }
        public int Right { get; set; }
        public bool Moving { get; set; }
        public Page Root { get; set; }
        public List<Page> Children { get; set; }
        public List<Page> Descendants { get; set; }

    }

    public class Id
    {
    }

    public class RootId
    {
    }
}

Aber dann meldet .Net natürlich das Int nicht implizit in RootId konvertierbar ist.

Wie wäre der richtige Weg, Id und RootId zu definieren?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von patrickheppler am .
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.177

beantworten | zitieren | melden

Hallo und willkommen,

du kannst einfach direkt int übergeben, d.h.


public class Page : INestedSet<Page, int, Nullable<int>>
// bzw. kürzer
public class Page : INestedSet<Page, int, int?>
private Nachricht | Beiträge des Benutzers
patrickheppler
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

Hallo,
mit

public class Page : INestedSet<Page, int, int?>
funktioniert es.

Mich haben TKey und TNullableKey im Interface irritiert. Ich dachte das müssen wegen dem T dann entsprechend eigene Typen sein.
Vielen Dank!
private Nachricht | Beiträge des Benutzers