Tôi đang cố gắng tìm ra một cách để tự động đúc một cái gì đó cho một hành động hoặc Func và tốt nhất mà tôi có thể đưa ra là một cái gì đó như thế này:Tại sao tôi không thể ngầm đúc một Đại biểu bằng các phương pháp Tiện ích mở rộng?
[TestFixture]
public class ExecutionTest
{
public void BadMethod()
{
throw new Exception("Something bad happened");
}
[Test]
public void TestBadMethod()
{
// Want this, but it won't work!!
// BadMethod.Execute().IgnoreExceptions();
// Ick
((Action)BadMethod).Exec().IgnoreExceptions();
// Still ick
((Action)BadMethod).IgnoreExceptions();
// Do not want
ExtensionMethods.Exec(BadMethod).IgnoreExceptions();
// Better but still meh
this.Exec(BadMethod).IgnoreExceptions();
}
}
public static class ExtensionMethods
{
public static Action Exec(this Action action)
{ return action; }
public static Action Exec(this object obj, Action action)
{ return action; }
public static void IgnoreExceptions(this Action action)
{
try { action(); }
catch {}
}
}
Có phải một/cách tốt hơn dễ dàng hơn để làm điều này, bất kỳ suy nghĩ?
Không chắc chắn rằng đó là một vấn đề của quá tải phương pháp bởi vì trình biên dịch sẽ tìm ra cái nào để gọi.Nhưng đây là câu trả lời tốt nhất mà tôi đã nhìn thấy cho đến nay ... –