我試圖通過調用以下內容來調用:StaticClass.DeleteObject(null, key)
。它沒有像我期望的那樣工作,並且lambda表達式中的代碼拋出NullReferenceException,因爲上下文爲空,這是可以理解的。我嘗試將AmazonS3Operation的上下文參數更改爲ref,但ReSharper隨後警告「訪問修改後的關閉」。C#關閉和訪問外部變量
基本上我只是想在注入方法中注入lambda表達式,然後調用它,如果你知道我想如何工作。這是可能的,或者我能做些什麼,如果不是,那麼相似?
/// <exception cref="IOException"></exception>
public static void DeleteObject(this AmazonS3Context context, string key)
{
AmazonS3Operation(context,() => context.Client.DeleteObject(
new DeleteObjectRequest().WithBucketName(context.CurrentBucket)
.WithKey(key)));
}
/// <exception cref="IOException"></exception>
private static void AmazonS3Operation(AmazonS3Context context, Action operation)
{
var shouldDispose = false;
try
{
if (context == null)
{
context = new AmazonS3Context();
shouldDispose = true;
}
operation();
}
catch (AmazonS3Exception e)
{
throw new IOException(e.Message, e);
}
finally
{
if (shouldDispose)
context.Dispose();
}
}
+1我不知道誰低估了這個,但這是我想到的確切解決方案!這是一個很好的答案。 – 2012-01-02 06:25:38