是否可以访问labda表达式中的变量?c#
我希望能够访问lambda表达式中的“co”。有可能吗?如果是,怎么做?如果不是,我该怎么办 我想在我的函数“Do”中传递一段代码,在这里我可以使用“Do”范围内的变量 如果你不知道我在说什么,请问我任何问题,我会尽力解释得更好是否可以访问labda表达式中的变量?c#,c#,lambda,scope,C#,Lambda,Scope,我希望能够访问lambda表达式中的“co”。有可能吗?如果是,怎么做?如果不是,我该怎么办 我想在我的函数“Do”中传递一段代码,在这里我可以使用“Do”范围内的变量 如果你不知道我在说什么,请问我任何问题,我会尽力解释得更好 public static type Do<type>(Func<type> fun) { OracleConnection co = null; type ret = default(type);
public static type Do<type>(Func<type> fun)
{
OracleConnection co = null;
type ret = default(type);
try
{
co = CreateCo();
MessageBox.Show("Connected");
ret = fun();
}
catch (Exception)
{
MessageBox.Show("Error");
}
finally
{
CloseCo(co);
}
return ret;
}
public static class Get
{
public static class Question
{
public static string byId()
{
//This lambda expression
return Do<string>(() =>
{ co./*here I can't access my object: why? how? */ });
}
}
}
公共静态类型Do(Func-fun)
{
OracleConnection=null;
类型ret=默认值(类型);
尝试
{
co=CreateCo();
MessageBox.Show(“已连接”);
ret=fun();
}
捕获(例外)
{
MessageBox.Show(“错误”);
}
最后
{
CloseCo(co),;
}
返回ret;
}
公共静态类Get
{
公共静态类问题
{
公共静态字符串byId()
{
//这个lambda表达式
返回Do(()=>
{co./*这里我无法访问我的对象:为什么?如何?*/});
}
}
}
当我得到答案时,我会更新这篇文章:
->我不明白,你到底想要什么 但如果你打电话:
return Do<string>(() => { });
co
在另一个类中声明(至少从代码看是这样)。您需要将其设置为当前声明的类的公共属性,然后从其他类访问它,或者通过构造函数或方法调用将其传递到Get
类。有意义的是,我要做的是在“do”中执行一块代码函数,并在这段代码中能够访问“Do”范围内的变量。我理解您的要求。我已经更新了我的答案。我希望它能帮助你。简直太棒了,非常感谢,它工作得非常好。
public static class Get
{
public static class Question
{
public static string byId()
{
Func<OracleConnection, string> func1 = (co) => co.ToString();
return Do<string>(func1);
}
}
}
public static type Do<type>(Func<OracleConnection, type> fun)
{
OracleConnection co = null;
type ret = default(type);
try
{
co = CreateCo();
MessageBox.Show("Connected");
ret = fun(co);
}
catch (Exception)
{
MessageBox.Show("Error");
}
finally
{
CloseCo(co);
}
return ret;
}