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:
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}");
}
}
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}'");
}
}
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");
}
}
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: [list] [*]Inherited Dictionary [code]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}"); } } [/code]
[*]Erweiterungsmethoden [code]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}'"); } } [/code] 3. Instanziiert [code]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!;
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...
Ich versuche, mit meinem Computer eine Verbindung zu einem Gerät herzustellen, indem ich den visa.ivi-Treiber verwende. Ich schreibe in C# mit Visual Studio 17.12.3.
Ich habe ein Programm mit...
Viele mindbare Module geben einen Satz von Objekten zurück. Wenn diese Objekte kein eindeutiges Identifizierungsattribut haben, werden die Daten häufig als Liste von Wörterbüchern zurückgegeben. Das...
Es geht um generische Methoden in Java mit zwei generischen Typen (einer für den Rückgabetyp und einer für einen formalen Parameter) und wie man sie implementiert.
Ich vermute, dass mir auf dem Bild...