Wörterbuchvererbung vs. instanziiertes Wörterbuch vs. Erweiterungsmethoden bei der Arbeit mit generischen WörterbüchernC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wörterbuchvererbung vs. instanziiertes Wörterbuch vs. Erweiterungsmethoden bei der Arbeit mit generischen Wörterbüchern

Post by Anonymous »

Ich versuche, mir die beste Vorgehensweise bei der Arbeit mit einem generischen Wörterbuch vorzustellen, das List speichert. Ich habe alle Methoden verwendet: geerbtes Wörterbuch, instanziiertes Wörterbuch und Erweiterungsmethoden. Meiner Meinung nach scheinen die Erweiterungsmethoden der einfachste Ansatz zu sein, da keine weitere neue Klasse beteiligt ist. In meinem Fall versuche ich, ein Wörterbuch von List zu laden, um es an meine Suchvorgänge im Frontend zu binden. Welches ist der geeignetste Weg, dies zu tun? In welchem ​​Szenario sollte ich jedes verwenden?
Hier sind meine Implementierungen:
  • Inherited Dictionary

    Code: Select all

    public class GenericDictionary: Dictionary
    {
    public T GetValue(string key)
    {
    if(TryGetValue(key,out var value) && value is T val)
    return val;
    if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(List))
    {
    var emptyList = Activator.CreateInstance(typeof(T));
    return (T)emptyList!;
    }
    throw new InvalidOperationException($"Type mismatch on key {key}");
    }
    }
    
  • Erweiterungsmethoden

    Code: Select all

    public static class GenericDictionaryExtensions
    {
    public static T GetList(this Dictionary dict, string key)
    {
    if (dict.TryGetValue(key, out var value))
    {
    if (value is T typedValue)
    return typedValue;
    
    if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(List)
    && value is IEnumerable enumerable)
    {
    var list = Activator.CreateInstance(typeof(T), enumerable)!;
    return (T)list;
    }
    }
    
    if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(List))
    {
    return (T)Activator.CreateInstance(typeof(T))!;
    }
    throw new InvalidOperationException($"Type mismatch on key '{key}'");
    }
    }
    
    3. Instanziiert

    Code: Select all

    public class GenericDictionary
    {
    private Dictionary _dict = new();
    public T GetValue(string key)
    {
    if (_dict.TryGetValue(key, out var value) && value is T typedValue)
    return typedValue;
    
    if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(List))
    {
    var emptyList = Activator.CreateInstance(typeof(T));
    return (T)emptyList!;
    
    }
    throw new InvalidOperationException($"type doesnt match");
    }
    }
    
    Bearbeiten: Tippfehler

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post