定义我自己花括号中你会体会到以下两个语法糖:此功能是否存在?在C#
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和这些类型的东西与返回。但我相信你可以想到一些事情。
您可以通过使用构造称为“前块”和Dispose()方法为“后块模仿的东西负载“功能。 – Dykam 2010-05-21 14:48:24
你能澄清你的意思吗? – Carlos 2010-05-21 15:04:04
你去了:http://stackoverflow.com/questions/2882983/does-this-feature-exist-defining-my-own-curly-brackets-in-c/2932023#2932023 – Dykam 2010-05-28 19:50:13