Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以访问labda表达式中的变量?c#_C#_Lambda_Scope - Fatal编程技术网

是否可以访问labda表达式中的变量?c#

是否可以访问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);

我希望能够访问lambda表达式中的“co”。有可能吗?如果是,怎么做?如果不是,我该怎么办

我想在我的函数“Do”中传递一段代码,在这里我可以使用“Do”范围内的变量

如果你不知道我在说什么,请问我任何问题,我会尽力解释得更好

    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;
    }