将类作为参数传递的泛型方法

本文关键字:泛型方法 参数传递 | 更新日期: 2023-09-27 18:14:14

我是新来的,所以请在标记我的问题-1之前提供您的建议。

在我下面的代码中,我想创建一个泛型类型函数,而不是"sendfirststrequest"answers"SendSecondRequest"。或者我们如何传递和强制转换对象?

static void Main(string[] args)
            {
                MyFirstRequest objRequest1 = new MyFirstRequest
                {
                    MyFirstRequest_ID = 1
                };
                SendFirstRequest(objRequest1);
                MySecondRequest objRequest2 = new MySecondRequest
                {
                    MySecondRequest_ID = 1
                };
                SendSecondRequest(objRequest2);
            }
            public static MyFirstResponse SendFirstRequest(MyFirstRequest objRequest)
            {
                MyFirstResponse objResponse = CreateDate1(objRequest);
                return objResponse;
            }
            public static MySecondResponse SendSecondRequest(MySecondRequest objRequest)
            {
                MySecondResponse objResponse = CreateDate2(objRequest);
                return objResponse;
            }
            public static MyFirstResponse CreateDate1(MyFirstRequest request)
            {
                MyFirstResponse objRespo = new MyFirstResponse
                {
                    MyFirstResponse_Name = "A",
                    MyFirstResponse_Address = "Address1"
                };
                return objRespo;
            }

    public static MySecondResponse CreateDate2(MySecondRequest request)
    {
        MySecondResponse objRespo = new MySecondResponse
            {
                MySecondResponse_Name = "A",
                MySecondResponse_Address = "Address1"
            };
        return objRespo;
    }

将类作为参数传递的泛型方法

问题是MyFirstRequestMyFirstResponseMySecondRequestMySecondResponse之间没有明显的关系来有效地利用泛型。这些类型甚至有不同的属性名,因为它们以类名为前缀(这也会防止使用dynamic)。

这似乎不是泛型的好选择。如果有以上两种类型,反射可以减少代码,但会将错误延迟到运行时。

使泛型更合理的一些设计更改:

  • 去掉Response类属性的类名前缀
  • 使用一个基类或接口来定义MyFirstResponseMySecondResponse(现在)的通用属性
  • 为每个Request类型添加一个CreateRequest方法,以返回相应的Response类型。