Pregunta

Que lindo JQuery Lo cual es una gran biblioteca de JavaScript es poder obtener el elemento en el que está trabajando como valor de retorno. Aquí hay un ejemplo de lo que estoy refiriendo:

$(function() { 
    $("#poo").css("clear", "both").css("margin", "10px");
});

Lo que me gustaría intentar implementar aquí es idénticamente el mismo que el código anterior para C# IDictionary interface. Mi intención es poder corregir el código de la siguiente manera:

IDictionary<string, string> myDictionary = 
    new Dictionary<string, string>().
        Add("key1", "value1").
        Add("key2", "value2").
        Add("key3", "value3");

Así que he creado un método de extensión como a continuación para IDictionary :

public static IDictionary<string, string> AddAndReturn(this IDictionary<string, string> dictionary, string key, string value) {

    dictionary.Add(key, value);
    return dictionary;
}

Y ahora puedo usarlo como:

IDictionary<string, string> poo = 
    new Dictionary<string,string>().
        AddAndReturn("key1", "value1").
        AddAndReturn("key2", "value2").
        AddAndReturn("key3", "value3");

Entonces, en cuanto a la pregunta aquí, lo que me pregunto es si estoy siguiendo el camino correcto aquí o no.

¿Es lo que estoy haciendo la implementación de la interfaz fluida de un hombre pobre o totalmente no relacionado con eso?

¿Hay algún caso conocido para esta implementación en C#?

¿Fue útil?

Solución

Si bien su patrón de implementación es correcto (y uno común), su caso de uso probablemente no sea la mejor opción. Objeto Los inicializadores de la colección funcionan para los tipos de diccionario también:

var poo =  new Dictionary<string,string> {
        { "key1", "value1" },
        { "key2", "value2" },
        { "key3", "value3" }, // this is permissible
};

El compilador convierte mágicamente esto en llamadas add (string, string). Por cierto, la coma aparentemente errónea después del último par es deliberada. El compilador permite esto para que pueda simplificar la lógica en los generadores de código como T4.

Otros consejos

También me gustaría agregar algo con respecto a "¿Hay algún caso conocido para esta implementación en C#?"

los StringBuilder.Append El método devuelve el StringBuilder, haciendo que el método sea encadenable, como sb.Append("a").Append("b"). Append("c").

Pero no hay muchos otros ejemplos como ese en .NET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top