在函数中有一个列表的动态参数
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;
我有一个 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;