现有方法的C#扩展方法

现有方法的C#扩展方法,c#,.net,C#,.net,如何为现有方法编写扩展方法,如: static class Extensions { public static void RunAsThread(this Action func) { Thread t = new Thread(delegate() { try { if (func != null) func();

如何为现有方法编写扩展方法,如:

static class Extensions
{
    public static void RunAsThread(this Action func)
    {
        Thread t = new Thread(delegate()
        {
            try
            {
                if (func != null)
                    func();
            }
            catch (ThreadInterruptedException tie) { }
            catch (ThreadAbortException tae) { }
            catch (Exception ex)
            {
                Logger.LogDebug(ex);
            }
        });
        t.Start();
    }
}
有没有什么方法可以让我以我想要的方式完美地运行这些方法

class WorkingClass
{
    public void Work()
    {
        //Works fine
        ((Action)DoSomething).RunAsThread();

        //Works fine
        Extensions.RunAsThread(DoSomething);

        //But I really need this to work
        DoSomething.RunAsThread();
    }

    private void DoSomething()
    {
        //Do Something
    }
}
我真的很想让DoSomething.runashread()起作用。 我试图更改“static void runashread(此委托…或此委托)”。 做不好。
这方面有什么办法吗?有什么办法吗?

不,你不能这样做,因为
DoSomething
不是一种类型,而是一种方法


此外,仅仅因为您可以将扩展方法附加到类型,并不意味着您应该

DoSomething
只是一个“方法组”,它将尽可能隐式转换为
Action
或兼容的委托类型

DoSomething
本身不是
委托
,因此不可能。但是您可以借助隐式方法组转换来执行以下操作

Action a = DoSomething;
a.RunAsThread();

如果
DoSomething
不一定是一个实际的方法,稍微调整一下就会使这个编译:

class WorkingClass
{
    public void Work()
    {
        //Works fine
        ((Action)DoSomething).RunAsThread();

        //Works fine
        Extensions.RunAsThread(DoSomething);

        //But I really need this to work
        DoSomething.RunAsThread();
    }

    private Action DoSomething = () =>
    {
        //Do Something
    };
}

我不能说这是否符合你正在写的其他内容。

不,你不能这样做
DoSomething
不是
操作
。在某些上下文中,编译器可以从中创建
操作
,但这不是这些上下文之一。