【问题标题】:Get Func<T> request method Parameters in C#在 C# 中获取 Func<T> 请求方法参数
【发布时间】:2019-11-19 13:38:12
【问题描述】:

我有两个具有一些共同功能的功能(即与服务建立连接并在调用后关闭连接)。我创建了一个名为“InvokeService”的方法,其中包含 Func 参数。如何在 InvokeService 中获取请求参数?我的意思是我需要获取请求的对象值?您可以通过下面给出的演示代码清楚地了解:

public void Method1(){
    InvokeService(()=> _service.getMathod1(request);
 }
 public void Method2(){
    InvokeService(()=> _service.getMathod2(request);
 }
 public void InvokeService(Func<T> request){
     //service open
     //I need here a complete object of the request of Method2 and its parameters
    request.Invoke();
    //service close
 }

如果有任何不明确或无法理解的地方,请随时问我。

【问题讨论】:

  • 不清楚你的问题到底是什么。您的帖子中没有问号。
  • 太好了!你有什么问题?
  • 我想你要找的是Code Review
  • 您可能需要像InvokeService&lt;T&gt;(Func&lt;T&gt; request) 一样声明它,以便InvokeService 了解T,但除此之外,是的...您的问题是什么?
  • 顺便说一句。 Func&lt;...&gt; 的通用参数列表的最后一项确定返回类型。所以 Func&lt;T&gt; 返回 T。这基本上就是像public T doStuff() { ... } 这样的“正常”方法的样子。 Func&lt;T1, T2&gt;期望一个参数T1 并且会返回一个T2;类似于public T2 doStuff(T1 t1) { ... }。对于void 返回,您可能需要使用Action&lt;...&gt;。 -- 或者你说的“我这里需要一个Method2请求的完整对象及其参数”到底是什么意思?

标签: c# .net function delegates generic-programming


【解决方案1】:

您可能想要使用template method 模式:

在操作中定义算法的骨架,将一些步骤推迟到子类。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。

在你的情况下,你可以有这样的东西:

    public abstract class AbstractClass
    {
        protected abstract void PrimitiveOperation();

        public void TemplateMethod()
        {
            // before common functionality

            PrimitiveOperation();

            // after common functionality
        }
    }

    class ConcreteClassA : AbstractClass
    {
        protected override void PrimitiveOperation()
        {
            // your A logic
        }
    }

    class ConcreteClassB : AbstractClass
    {
        protected override void PrimitiveOperation()
        {
            // your B logic
        }
    }

如果您想为每个具体类返回不同的内容或根据具体类使用不同的参数,您可以使用泛型来实现。如果是这样,请告诉我。

【讨论】:

    【解决方案2】:

    可以通过反射解决; request.GetMethodInfo()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2010-09-14
      • 2019-07-07
      • 1970-01-01
      相关资源
      最近更新 更多