c# Action<T> Umgang mit anonymen Methoden
Ich habe mir vor kurzem erkundeten c# zu mir. Aber stecken mit diesem problem.
Also ich habe eine Methode dbExec
public void dbExec(Action<OleDbCommand> func)
{
using (var conn = new OleDbConnection(connStr))
{
conn.Open();
var cmd = conn.CreateCommand();
func(cmd);
}
}
delegieren,
public delegate void DelCmd(OleDbCommand cmd);
und eine andere Methode:
public ICollection<string> CheckUserPermissions()
{
List<string> logins = new List<string>();
DelCmd delCmd = delegate(OleDbCommand cmd)
{
cmd.CommandText = "SELECT PERMISSIONS.LOGIN FROM PERMISSIONS";
using (var rdr = cmd.ExecuteReader()) while (rdr.Read()) logins.Add(rdr["LOGIN"].ToString());
};
dbExec(delcmd);
return logins;
}
Das problem mit dbExec(delcmd);
- Anweisung. Der Fehler ist "delcmd existiert nicht im aktuellen Kontext". Wie übergeben Sie eine anonyme Methode als parameter an eine andere Methode, mit der Aktion erklärten parameter?
Das ist, weil die upper-case -
C
Fragen 🙂 delcmd
sollte delCmd
.InformationsquelleAutor user2846723 | 2013-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man auch vermeiden, definieren einer Delegierten zusammen.
Wie diese:
Edit: was ich eigentlich meine, was Servy schrieb in dem Kommentar auf die andere Antwort, aber er beschrieb es so besser.
InformationsquelleAutor Philipp M
Haben Sie einen Tippfehler - es sollte
delCmd
stattdelcmd
. C# ist case-sensitive SpracheUPDATE:
DelCmd
ist nicht dasselbe wieAction<OleDbCommand>
- verschiedene Arten, und Sie selbst kann nicht wirken Delegierten zueinander. Aber Sie können neue action-Delegat:Statt der Umwandlung einer Stellvertretung der anderen einfach entfernen Sie die benutzerdefinierten Delegaten-definition und weisen die anonymen Delegaten zu einem
Action
von Anfang an.InformationsquelleAutor Sergey Berezovskiy