我想为c#编译器创建自定义语句以生成try finally块。 就像锁定声明一样。
例如
private readonly ReaderWriterLockSlim _lockObject
private void MyMethod()
{
MyWriteLock(lockObject)
{
}
}
private void MyMethod2()
{
MyReadLock(lockObject)
{
}
}
编译器应该为我生成以下代码
private void MyMethod()
{
try
{
lockObject.EnterWriteLock();
.. statetments for the method
}
finally
{
_lockObject.ExitWriteLock();
}
}
private void MyMethod2()
{
try
{
lockObject.EnterReadLock();
.. statetments for the method
}
finally
{
_lockObject.ExitReadLock();
}
}
答案 0 :(得分:5)
您无法在C#中创建自己的语句。最接近try / finally的是using
语句:
using (lockObject.AcquireReadToken())
{
}
其中AcquireReadToken()
将获得一个读锁定,并返回一个IDisposable
,它会在处理时释放锁定。
答案 1 :(得分:2)
您应该尝试 ILWeaving 。我没有尝试过,但使用ILWeaving可以完成很多“魔术”。我使用 NotifyPropertyWeaver ,它使用ILWeaving来注入代码。
参考此问题
答案 2 :(得分:0)
您可以使用以下
之一进行ILWeaving但是我认为在这种情况下,使用@JonSkeet建议的'using'语句将是更简单的解决方案。
当然,除非您有兴趣了解IL操作。在这种情况下去吧:)