gpt4 book ai didi

c# - 捕获变量实例化问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:03 24 4
gpt4 key购买 nike

我目前正在思考一些我无法正确理解的想法。

问题是我想使用一个 lambda 函数来实例化捕获的变量,并使用另一个 lambda 函数来访问该变量的属性。

由于实例化发生在 lambda 中,当我想在第二个 lambda 中使用它时,变量实际上并没有被实例化。这是一个先有鸡还是先有蛋的问题。

我知道变量在第二个 lambda 中使用时实例化,但编译器不会。

我的想法有什么方法可以实现吗?这是实际的代码:

class Program
{
static void Main(string[] args)
{
SqlCommand cmd;

using (new DisposableComposite(
() => cmd = new SqlCommand(),
() => cmd.Connection)) // <- compiler error - variable not instantiated
{
// code
}
}
}

class DisposableComposite : IDisposable
{
private List<IDisposable> _disposables = new List<IDisposable>();

public DisposableComposite(params Func<IDisposable>[] disposableFuncs)
{
// ensure the code is actually executed
foreach (var func in disposableFuncs)
{
IDisposable obj = func.Invoke();
_disposables.Add(obj);
}
}

public void Dispose()
{
foreach (var disposable in _disposables)
{
disposable.Dispose();
}
}
}

最佳答案

你的意思是只添加:

SqlCommand cmd = null;

(这解决了“明确赋值”问题;它明确赋值...一个空值;-p 然后我们在使用前更新该值)。

IMO,不过,您最好使用嵌套的 using 语句...并且(从代码中)不清楚实际连接将来自何处...

using(var conn = new SqlConnection(...))
using(var cmd = conn.CreateCommand()) {
// ...
}

关于c# - 捕获变量实例化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com