是否可以在labda表达式中访问变量? C#

时间:2017-04-18 22:28:32

标签: c# lambda scope

我希望能够访问" co"在我的lambda表达式中。有可能这样做吗?如果有,怎么样?如果没有,我该怎么做呢?

我想在我的函数中传递一段代码" 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? */ });
            }
        }
    }

当我拿到一个时,我会用答案更新这篇文章: - &GT; One answer that work !!!

1 个答案:

答案 0 :(得分:0)

我不明白,你究竟想要什么。

但如果你打电话:

 return Do<string>(() => { });

() => {}表示具有lamda表达式的函数。但是该函数与您的类型声明无关。在类型声明中,您有一个函数作为参数,但此函数与您的类型无关。

我认为,这就是为什么你无法访问“co”的原因。

更新

这是一个解决方案吗?

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