Cómo definir un comportamiento para cada inserción en un diccionario en C#? Por ejemplo, escribir en el registro cada inserción.
Tengo una clase que contiene un campo de tipo Dictionary.
Me gustaría registrar cada inserción en el diccionario.
¿Cuál es la forma más elegante de hacerlo?
Intenté definir una propiedad del diccionario y poner el registro en el método set
:
private Dictionary<string, string=""> _myDictionary = new Dictionary<string, string="">();
private Dictionary<string, string=""> MyDictionary
{
get
{
return _myDictionary;
}
set
{
_logger.Trace($"MyDictionary.set: value = {value}");
_myDictionary = value;
}
}
Pero esto no es relevante para una inserción, solo para una asignación de referencia al diccionario.
Me gustaría “capturar” el establecimiento de una clave-valor como en la siguiente operación, y registrarlo:
MyDictionary["key"] = "some value";
¿Cómo puedo hacerlo?</string,></string,></string,>
davy.ai
Una solución sería crear una clase de diccionario personalizada que herede de
Dictionary
y anule los métodosAdd
yAddRange
. Dentro de esos métodos, puedes registrar las inserciones antes de invocar la implementación de la clase base. Aquí tienes un ejemplo de implementación:Luego puedes usar esta clase en lugar del
Dictionary
estándar en tu código:Esto registrará las inserciones en el diccionario usando el
ILogger
proporcionado. Ten en cuenta que si necesitas registrar la modificación de un par clave-valor existente (es decir,MyDictionary["key"] = "nuevo valor"
), también deberás anular la propiedadthis[TKey key]
.</string,></string,></string,></tkey,></tkey,></tkey,>