在函数中有一个列表的动态参数

Have a dynamic parameter for a List in Function

我有一个 SOAP APi,它需要创建一个 XML 字符串作为请求发送。 需要许多不同的 XML 字符串。

例如。 Customer 和 Item 字符串完全不同,而且这个旧软件没有 WDSL 功能。

我有一个函数可以检查正在调用哪个 API enpoint,然后从预定义函数中获取操作、uRL 和信封 (XML)。

private static (string URL, string action, string envelope) getTaskDetails(string task, 
List<Object> envelopeList)
        {
            string _action = "";
            string _URL = "";
            string _envelope = "";


            switch (task)
            {
                case "getCustomerDetails":
                    _action = minfosDetails.minfosCustomerAction;
                    _URL = minfosDetails.minfosCustomerURL;
                    _envelope = getCustomerDetails(envelopeList);
                    break;

                default:
                    
                    break;

            }

            return (_URL, _action, _envelope);
        }

上面是(无效的)代码。

我想要的是接受抛给它的任何 LIST 的列表(我知道这是错误的)。

例如。我可以将 customerList、ItemList 或 staffList 等发送给它。 然后当我 运行 开关时,它将获取列表并将其放入子函数以创建信封。

编辑:问题已回答,我的工作代码如下: 使用

getTaskDetails<T>(string task, List<T> envelopeList)

要调用我使用的下一个函数:

_envelope = getCustomerDetails(envelopeList.Cast<ACustomer>());

您可以尝试使用泛型,这样方法就会像这样改变

private static (string URL, string action, string envelope) getTaskDetails<T>(List<T> envelopeList)

那么您可以检查正在传递的 T 类型,而不是使用您的参数 string task

无法简单地将 List<object> 转换为 List<ACustomer>。您可以创建一个新列表。

_envelope = getCustomerDetails(envelopeList.Cast<ACustomer>().ToList());

或者,您可以更改 getCustomerDetails 的签名以接受 IEnumerable 而不是 List:

public static string getCustomerDetails(IEnumerable<ACustomer> customerList)

然后 .ToList() 部分就不需要了,也没有创建新的列表:

_envelope = getCustomerDetails(envelopeList.Cast<ACustomer>());

要使用 Cast 扩展方法,您必须 using System.Linq;