c# - 这个功能存在吗?在 C# 中定义我自己的大括号

标签 c# .net readability syntactic-sugar

您会喜欢以下两个语法糖:

lock(obj)
{
//Code
}

same as:

Monitor.Enter(obj)
try
{
//Code
}
finally
{
Monitor.Exit(obj)
}

using(var adapt = new adapter()){
//Code2
}

same as:

var adapt= new adapter()
try{
//Code2
}
finally{
adapt.Dispose()
}

显然,每种情况下的第一个示例都更具可读性。有没有办法自己定义这种东西,要么用 C# 语言,要么在 IDE 中?我问的原因是有许多类似的用法(长篇)可以从中受益,例如。如果您使用的是 ReaderWriterLockSlim,则需要非常相似的东西。

编辑 1:

我被要求提供一个例子,所以我会试一试:

myclass
{
ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();

void MyConcurrentMethod()
{
  rwl.EnterReadLock();
  try{
    //Code to do in the lock, often just one line, but now its turned into 8!
  }
  finally
  {
    rwl.ExitReadLock();
  }
}
}

//I'd rather have:
void MyConcurrentMethod()
{
rwl.EnterReadLock()
{
   //Code block. Or even simpler, no brackets like one-line ifs and usings
}
}

当然,您必须考虑如何使用 TryEnterReadLocks 以及那些有返回的东西。但我相信你能想到一些东西。

最佳答案

不完全是,但您可以使用 Action 委托(delegate)来接近:

void MyBrace(Action doSomething)
{      
     try
     {
        //wait for lock first

        doSomething();
     }
     finally
     {
         //special cleanup
     }
}

然后像这样使用它:

MyBrace(() => 
{
   //your code goes here, but won't run until the lock is obtained
});  // cleanup will always run, even if your code throws an exception

请注意,这有一些限制。例如,您不能在新大括号内有有意义的 return 语句。多亏了闭包,您至少仍然可以使用局部变量。

关于c# - 这个功能存在吗?在 C# 中定义我自己的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2882983/

相关文章:

java - 我应该更喜欢代码的可读性而不是安全性吗?

c++ - 包装 STL 习惯用法以提高可读性是个好主意吗?

html - 获取网页内容,类似于Readability as service

c# - 一种检查是否进行了 Paypal 交易的方法

c# - C# 中的 IIR 低通滤波器在 x86 模式下中断

C# 枚举器术语困惑

c# - 生成 HTML 文件的最简单方法是什么?

c# - 连接到 Entity Framework 中的未知数据库

c# - 从多个图像生成单个 PDF

C# Collection 被修改错误,从文件中读取乱码文本