Ich versuche, eine elegante und erweiterbare Möglichkeit der Abfrage eines Wörterbuchs zu erstellen, das eine Enumeration einer Reihe von Zeichenfolgen zuordnet.Elegante Möglichkeit zum Abfragen eines Wörterbuchs in C#
So habe ich diese Klasse SearchFragments
, die das Wörterbuch enthält. Ich möchte dann eine Methode, bei der Verbraucher dieser Klasse einfach "HasAny" fragen können, und das ist das Bit, wo ich kämpfe, einfach einige Abfrage wie Ausdruck übergeben und die boolesche Antwort zurückbekommen.
public class SearchFragments
{
private readonly IDictionary<SearchFragmentEnum, IEnumerable<string>> _fragments;
public SearchFragments()
{
_fragments = new Dictionary<SearchFragmentEnum, IEnumerable<string>>();
}
public bool HasAny(IEnumerable<SearchFragmentEnum> of)
{
int has = 0;
_fragments.ForEach(x => of.ForEach(y => has += x.Key == y ? 1 : 0));
return has >= 1;
}
}
Das Problem mit der Art und Weise dies derzeit ist, ist, dass die Verbraucher von dieser Klasse müssen jetzt ein IEnumerable<SearchFragmentEnum>
konstruieren, die ziemlich chaotisch sein können.
Was ich suche, ist, dass die verzehr Code in der Lage sein wird, etwas entlang der Linien von schreiben:
searchFragments.HasAny(SearchFragmentEnum.Name, SearchFragmentEnum.PhoneNumber)
Aber wo dieses Argument Liste in der Größe variieren kann (ohne mich Verfahren Überlastungen schreiben in die SearchFragments
Klasse für jede mögliche Kombination (so dass, wenn neue Werte in die SearchFragmentEnum
zu einem späteren Zeitpunkt hinzugefügt werden, werde ich nicht die Klasse zu aktualisieren.
Mögliche Duplikat [Warum die params Schlüsselwort?] (https://stackoverflow.com/questions/7580277/why-use-the-params-keyword) – krillgar
versuchen Sie dies: 'Rückkehr von? .Any (_fragments.ContainsKey) ?? false; ' – Sergey