gpt4 book ai didi

c# - c#中的自定义复合语句

转载 作者:太空狗 更新时间:2023-10-29 22:13:27 24 4
gpt4 key购买 nike

我想编写自己的自定义复合语句,它们具有与 usinglock 机制类似的机制,它们在语句的开头和结尾注入(inject)了代码编译前阻塞。

我曾尝试搜索可能问过类似问题的问题,但我无法正确弄清楚这种“代码范围界定”的名称,除了文档说这些是复合语句之外。

我知道“锁定”和“使用”是关键字。我不想拥有自己的关键字,因为我知道这是不可能的。

我不确定这在 C# 中是否可行,例如:

而不是做:

StartContext(8);
//make method calls
EndContext();

这可以简化为:

DoSomethingInContext(8) {
//make method calls
}

当然,这不一定只是一个单行调用。封装代码的开始和结束可以是自定义复合语句插入的多行代码。

最佳答案

您可以稍微重写您的代码:

DoSomethingInContext(8, () => {
// make method calls
});

你的方法的签名应该是这样的:

public void DoSomethingInContext(int contextId, Action contextBoundAction)
{
// start/open/enter context
try
{
contextBoundAction();
}
finally
{
// stop/close/exit context
}
}

因为这里有一个使用 IDisposable 的替代答案,所以需要注意的一件事是,这种基于委托(delegate)的语法可以在各种(旧)版本的 Visual Studio 和 ReSharper 中进行智能感知有点不稳定。有时它会尝试帮助您填写 DoSomethingInContext 的参数,而当您确实希望它帮助您填写委托(delegate)内的方法调用中的参数时。这对于其他 IDE 也是如此,例如较旧的 Xamarin Studios,它们在嵌套委托(delegate)方面存在严重的性能问题(如果您开始嵌套这些上下文绑定(bind)的东西)。

我不会因此而改变我的编程风格,但请注意这一点。

关于c# - c#中的自定义复合语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863285/

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