[英]How do I put optional parameters in methods?
是否可以在方法中声明可选参数?
例如,在delphi中,我可以执行以下操作:
procedure Test(p1:integer;p2:integer;p3:integer = 2;p4:integer = 4)
当我调用该函数时,可以使用四个参数或两个参数来调用它:
Test(2,3); //p3 = 2,p4 = 4.
Test(2,3,4,5); //p3 = 4,p4 = 5;
在C#中怎么可能?
恐怕这在C#1至3中是不可能的。但是,好消息是,由于它是一项要求很高的功能(尽管当然有些人不愿看到它),微软最终决定添加它到C#4。
C#4语法如下:
public static void SayHello(string s = "Hello World!")
{
Console.WriteLine(s);
}
用法:
SayHello(); // Prints "Hello World!"
SayHello("Hello."); // Prints "Hello."
SayHello(s: "Hello."); // Prints "Hello."
(最后一个示例使用了一个命名参数,在这种情况下,这实际上不是必需的,但是当您有多个可选参数时会有所帮助。)
您要么必须等待支持可选参数的C#4.0 ,要么使用标准的重载机制:
void Test(int p1, int p2, int p3, int p4)
{ }
void Test(int p1, int p2)
{
Test(p1, p2, 2, 4);
}
在C#4.0中是可能的,但是直到发布该代码之前,您可以通过创建方法的重载版本来解决它:
public void MyMethod( int a, int b, int c )
{
...
}
public void MyMethod( int a, int b)
{
MyMethod(a, b, 4);
}
您可以使用可变参数
使用params关键字。
void paramsExample(params int[] argsRest)
{
if(argsRest.Length == 2) then...
else if(argsRest.Length == 4) then...
else error...
}
using System;
using System.Runtime.InteropServices;
public static void SayHello([Optional][DefaultParameterValue("Hello Universe!")] string s)
{
Console.WriteLine(s);
}
做完了! :)
您使用这样的重载
Test(int p1, int p2)
Test(int p1, int p2, int p3)
您可以让他们像这样调用私有方法
Test(int[] ps)
然后处理数据。
解决此问题的另一种方法是不使用重载/可选参数,而是根据要执行的操作来命名方法-这似乎是一个不好的权衡,但是您的代码可能会更易于阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.