Laden...

Hilfe bei der Implementierung eines Interface

Erstellt von patrickheppler vor 2 Jahren Letzter Beitrag vor 2 Jahren 226 Views
P
patrickheppler Themenstarter:in
2 Beiträge seit 2021
vor 2 Jahren
Hilfe bei der Implementierung eines Interface

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?

4.931 Beiträge seit 2008
vor 2 Jahren

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?>

P
patrickheppler Themenstarter:in
2 Beiträge seit 2021
vor 2 Jahren

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!