Idictionary AddReturn Extension per interfaccia fluente
-
28-10-2019 - |
Domanda
Di cosa è bello JQuery Che è una grande libreria JavaScript è essere in grado di ottenere l'elemento su cui stai lavorando come valore di ritorno. Ecco un esempio di ciò che mi riferisco:
$(function() {
$("#poo").css("clear", "both").css("margin", "10px");
});
Quello che vorrei provare ad implementare qui è identico come sopra il codice per C# IDictionary
interface
. La mia intenzione è di essere in grado di correggere il codice come segue:
IDictionary<string, string> myDictionary =
new Dictionary<string, string>().
Add("key1", "value1").
Add("key2", "value2").
Add("key3", "value3");
Quindi ho creato un metodo di estensione come di seguito per IDictionary
:
public static IDictionary<string, string> AddAndReturn(this IDictionary<string, string> dictionary, string key, string value) {
dictionary.Add(key, value);
return dictionary;
}
E ora sono in grado di usarlo come:
IDictionary<string, string> poo =
new Dictionary<string,string>().
AddAndReturn("key1", "value1").
AddAndReturn("key2", "value2").
AddAndReturn("key3", "value3");
Quindi, per quanto riguarda la domanda qui, quello che mi chiedo è se sto seguendo la strada giusta qui o no.
Quello che sto facendo fluentemente l'implementazione dell'interfaccia di un uomo povero o è totalmente estraneo a questo?
C'è qualche caso noto per questa implementazione in C#?
Soluzione
Mentre il modello di implementazione è corretto (e uno comune in questo) il tuo caso d'uso non è probabilmente la scelta migliore. Oggetto Gli inizializzatori di raccolta funzionano anche per i tipi di dizionario:
var poo = new Dictionary<string,string> {
{ "key1", "value1" },
{ "key2", "value2" },
{ "key3", "value3" }, // this is permissible
};
Il compilatore trasforma magicamente questo in chiamate ADD (String, String). A proposito, la virgola apparentemente errata dopo l'ultima coppia è deliberata. Il compilatore lo consente in modo da poter semplificare la logica nei generatori di codice come T4.
Altri suggerimenti
Vorrei anche aggiungere qualcosa riguardo a "C'è qualche caso noto per questa implementazione in C#?"
Il StringBuilder.Append
Il metodo restituisce il costruttore String, rendendo il metodo catena, come ad esempio sb.Append("a").Append("b"). Append("c")
.
Ma non ci sono molti altri esempi come quello in .NET.