如何跳过库函​​数中的某些可选参数

时间:2014-08-08 16:51:03

标签: c# function arguments twilio

我一直在研究Winforms C#应用程序,我正在使用Twilio来实现SMS功能。 Twilio有一个名为' ListSmsMessages'看起来如下:

public virtual SmsMessageResult ListSmsMessages(
    string to, string from, DateTime? dateSent, int? pageNumber, int? count);

文档说每个都是可选的。我可以通过填写任何字段client.ListSmsMessages();或填写所有字段client.ListSMSMessages("to","from", date, 1,10);来成功调用该函数,但我无法选择我想要的参数。例如仅client.ListSMSMessages("to",date);

我做了一些研究,发现C#4.0应该可以做client.ListSMSMessages(to:"to",datesent: date);之类的事情但是这不起作用。

我想知道是否因为我是using Twilio;而不是编写自己的类,如果这会影响我应该如何调用可选参数?或者他们的文档可能不正确,说明它们是可选的。

3 个答案:

答案 0 :(得分:8)

那些是可以为空的参数,而不是可选的。如果您想跳过其中一些内容,请将null作为值传递。

client.ListSMSMessages("to", null, date, null, null);

更多详情:

如果你想要可选的args,那么就在lib中的那个上创建你自己的函数(建立在Robert的答案:) :):

public SmsMessageResult MyListSmsMessages(
    string to = null, string from = null, DateTime? dateSent = null, int? pageNumber = null, int? count = null)
{
  return client.ListSMSMessages(to, from, date, pageNumber, count); 
}

答案 1 :(得分:4)

基于Marcel的回答,如果Twilio确实构建了C#调用可选参数的函数,它会是什么样子:

public virtual SmsMessageResult ListSmsMessages(
    string to = null, string from = null, DateTime? dateSent = null, 
    int? pageNumber = null, int? count = null);

注意每个param如何被赋予一个默认值,当你选择不传入任何内容时,它会被使用。

答案 2 :(得分:4)

Twilio只有两个重载:

SmsMessageResult ListSmsMessages()
SmsMessageResult ListSmsMessages
    (string to, string from, DateTime? dateSent, int? pageNumber, int? count)

您可以将null传递给您不想要的参数,或者,如果您想要最大可读性,请创建自己的扩展方法:

SmsMessageResult ListSmsMessages
    (this TwilioRestClient @this,
     string to = null, string from = null, DateTime? dateSent = null,
     int? pageNumber = null, int? count = null)
{
    @this.ListSmsMessages(to, from, dateSent, pageNumber, count);
}

使用此扩展方法,您可以按照自己的方式拨打Twilio:

client.ListSMSMessages(to: "to", dateSent: date);

顺便说一下,您还可以为Twilio创建拉取请求。它在GitHub上,他们似乎接受了它们。 https://github.com/twilio/twilio-csharp