我最近自己探索了 C#。但是遇到了这个问题。
所以我有一个方法 dbExec
public void dbExec(Action<OleDbCommand> func)
{
using (var conn = new OleDbConnection(connStr))
{
conn.Open();
var cmd = conn.CreateCommand();
func(cmd);
}
}
委托(delegate),
public delegate void DelCmd(OleDbCommand cmd);
还有另一种方法:
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;
}
dbExec(delcmd);
语句的问题。错误是“delcmd 在当前上下文中不存在”。如何将匿名方法作为参数传递给另一个带有 Action 声明参数的方法?
最佳答案
您也可以完全避免定义委托(delegate)。
像这样:
public ICollection<string> CheckUserPermissions()
{
List<string> logins = new List<string>();
Action<OleDbCommand> delCmd = 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;
}
编辑:我实际上是指 Servy 在对另一个答案的评论中写的内容,但他描述得更好。
关于c# Action<T> 如何处理匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19182432/