不能对匿名方法使用 ref 或 out 参数
Cannot use use ref or out parameter for anonymous methods
static BackgroundWorker worker;
static void Main(string[] args)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
Console.ReadLine();
}
static void worker_DoWork(object sender,DoWorkEventArgs e)
{
string strClientId = "2211"; Authenticate(ref strClientId);
}
static void Authenticate(ref string strClientId)
{
Timer timer = new Timer(500);
//Error in this line
//Cannot use ref or out parameter 'strClientId' inside an anonymous method,lambda expression or query expression
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e,ref strClientId);
//timer.Elapsed += Authenticates_Timer();
timer.Start();
}
static void Authenticates_Timer(object sender, ElapsedEventArgs e, ref string strClientId)
{
//want to use variable here
strClientId = "";
}
如果有一种方法我可以在传递时使用 ref 变量
事件参数不能使用 ref 或 out 参数 'strClientId'
在匿名方法、lambda 表达式或查询中
expression.I 知道这是重复的问题,但我做不到
弄清楚如何解决这个问题已经引用了不同的帖子和
也在 codeproject 中发布了问题,但没有人回应
感谢帮助
我建议将 strClientId
共享为静态变量:
static BackgroundWorker worker;
static string strClientId;
static void Main(string[] args)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
Console.ReadLine();
}
static void worker_DoWork(object sender,DoWorkEventArgs e)
{
strClientId = "2211";
Authenticate();
}
static void Authenticate()
{
Timer timer = new Timer(500);
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e);
timer.Start();
}
static void Authenticates_Timer(object sender, ElapsedEventArgs e)
{
strClientId = "";
}
它对你有用吗?
更新:好的,让我们试试这个:
static void worker_DoWork(object sender,DoWorkEventArgs e)
{
string strClientId = "";
var setClientId = new Action<string>(v => { strClientId = v; });
setClientId("2211");
Authenticate(setClientId);
}
static void Authenticate(Action<string> setClientId)
{
Timer timer = new Timer(500);
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e, setClientId);
timer.Start();
}
static void Authenticates_Timer(object sender, ElapsedEventArgs e, Action<string> setClientId)
{
setClientId("");
}
就这么简单:
static void Authenticate(ref string strClientId)
{
Timer timer = new Timer(500);
var strClientIdVar = strClientId;
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e,ref strClientIdVar);
timer.Start();
}
static BackgroundWorker worker;
static void Main(string[] args)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
Console.ReadLine();
}
static void worker_DoWork(object sender,DoWorkEventArgs e)
{
string strClientId = "2211"; Authenticate(ref strClientId);
}
static void Authenticate(ref string strClientId)
{
Timer timer = new Timer(500);
//Error in this line
//Cannot use ref or out parameter 'strClientId' inside an anonymous method,lambda expression or query expression
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e,ref strClientId);
//timer.Elapsed += Authenticates_Timer();
timer.Start();
}
static void Authenticates_Timer(object sender, ElapsedEventArgs e, ref string strClientId)
{
//want to use variable here
strClientId = "";
}
如果有一种方法我可以在传递时使用 ref 变量 事件参数不能使用 ref 或 out 参数 'strClientId' 在匿名方法、lambda 表达式或查询中 expression.I 知道这是重复的问题,但我做不到 弄清楚如何解决这个问题已经引用了不同的帖子和 也在 codeproject 中发布了问题,但没有人回应 感谢帮助
我建议将 strClientId
共享为静态变量:
static BackgroundWorker worker;
static string strClientId;
static void Main(string[] args)
{
worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
Console.ReadLine();
}
static void worker_DoWork(object sender,DoWorkEventArgs e)
{
strClientId = "2211";
Authenticate();
}
static void Authenticate()
{
Timer timer = new Timer(500);
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e);
timer.Start();
}
static void Authenticates_Timer(object sender, ElapsedEventArgs e)
{
strClientId = "";
}
它对你有用吗?
更新:好的,让我们试试这个:
static void worker_DoWork(object sender,DoWorkEventArgs e)
{
string strClientId = "";
var setClientId = new Action<string>(v => { strClientId = v; });
setClientId("2211");
Authenticate(setClientId);
}
static void Authenticate(Action<string> setClientId)
{
Timer timer = new Timer(500);
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e, setClientId);
timer.Start();
}
static void Authenticates_Timer(object sender, ElapsedEventArgs e, Action<string> setClientId)
{
setClientId("");
}
就这么简单:
static void Authenticate(ref string strClientId)
{
Timer timer = new Timer(500);
var strClientIdVar = strClientId;
timer.Elapsed += (sender, e) => Authenticates_Timer(sender, e,ref strClientIdVar);
timer.Start();
}