微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Action<T> 调用通用方法

如何解决使用 Action<T> 调用通用方法

我正在创建一个通用操作以从给定的通用 <T> 调用方法

public class TestService
{
    public void TestService1()
    {
        // DO SOMETHING
    }
}

使用我在基类中创建的通用方法调用

public abstract class ServiceBase
{
    protected internal void ExecuteService<T>(Action<T> action)
    {
        // execute here
        action.Invoke() // here is my problem
    }
}

在其他继承类中执行:

public void TestVoid()
{
    ExecuteService<TestService>(x => x.TestService1());
}

我想使用 TestService1 执行调用 ExecuteService 方法
我如何实现这一目标?

解决方法

如果问题是在您的操作中提供新实例,您可以简单地这样做:

using System;

class Program : ServiceBase
{
    static void Main()
    {
        var program = new Program();

        program.ExecuteService<TestService>(x => x.TestService1());
    }
}

public class TestService
{
    public void TestService1() 
        => Console.WriteLine($"{nameof(TestService)}.{nameof(TestService1)}();");
}

public abstract class ServiceBase
{
    protected internal void ExecuteService<T>(Action<T> action) where T : new() 
        => action?.Invoke(new T());
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。