Questions tagged «optional-parameters»

可选参数是调用者可以在对函数或方法的调用中包括但不必包含的参数。如果省略,则使用默认值。在大多数情况下使用默认值时,可选参数很有用,但有时仍需要指定。


4
如何快速进行可选的关闭?
我试图在Swift中声明一个需要可选闭包的参数。我声明的函数如下所示: class Promise { func then(onFulfilled: ()->(), onReject: ()->()?){ if let callableRjector = onReject { // do stuff! } } } 但是Swift抱怨说,“ if let”声明时,“条件中的绑定值必须是Optional类型”。

13
是否应该在C#4.0中使用重载或可选参数声明方法?
我正在看Anders谈论C#4.0和C#5.0的预览,这让我开始思考,何时可选参数在C#中可用,这是声明不需要指定所有参数的方法的推荐方式? 例如,类似FileStream该类的东西有大约十五个不同的构造函数,这些构造函数可以划分为逻辑“族”,例如,字符串中的下面的那些,an中的一个IntPtr和a中的一个SafeFileHandle。 FileStream(string,FileMode); FileStream(string,FileMode,FileAccess); FileStream(string,FileMode,FileAccess,FileShare); FileStream(string,FileMode,FileAccess,FileShare,int); FileStream(string,FileMode,FileAccess,FileShare,int,bool); 在我看来,可以通过以下方法简化这种类型的模式:改为使用三个构造函数,并对可以默认使用的参数使用可选参数,这将使不同的构造函数系列更加不同[注:我知道此更改不会在BCL中完成,我假设是针对这种情况]。 你怎么看?从C#4.0开始,将密切相关的构造函数和方法组作为具有可选参数的单个方法会更有意义,还是有充分的理由坚持传统的多次重载机制?


8
无法将String.Empty用作可选参数的默认值
我正在阅读Bill Wagner撰写的Effective C#。在第14项-最小化重复初始化逻辑中,他显示了以下在构造函数中使用新的可选参数功能的示例: public MyClass(int initialCount = 0, string name = "") 请注意,他使用""代替string.Empty。 他评论: 您会注意到[在上面的示例中]第二个构造函数在name参数上为默认值指定了“” ,而不是更习惯的string.Empty。那是因为string.Empty不是编译时常量。它是在字符串类中定义的静态属性。因为它不是编译常量,所以不能将其用作参数的默认值。 如果我们不能string.Empty在所有情况下都使用静态,那这是否会破坏其目的?我认为我们将使用它来确保我们有一种独立于系统的方式来引用空字符串。我的理解错了吗?谢谢。 更新 只是后续评论。根据MSDN: 每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送参数,则使用默认值。默认值必须是常量。 这样一来,我们将无法使用System.Environment.NewLine或使用新实例化的对象作为默认值。我还没有使用过VS2010,这真令人失望!

9
覆盖方法上的C#可选参数
似乎在.NET Framework中,重写该方法时,可选参数存在问题。以下代码的输出是:“ bbb”“ aaa”。但是我期望的输出是:“ bbb”“ bbb”。是否有解决方案?我知道可以通过方法重载来解决,但想知道这样做的原因。该代码在Mono中也可以正常工作。 class Program { class AAA { public virtual void MyMethod(string s = "aaa") { Console.WriteLine(s); } public virtual void MyMethod2() { MyMethod(); } } class BBB : AAA { public override void MyMethod(string s = "bbb") { base.MyMethod(s); } public override void MyMethod2() { …


5
接口的可选参数
使用c#4.0-构建接口和实现该接口的类。我想在接口中声明一个可选参数,并将其反映在类中。因此,我有以下内容: public interface IFoo { void Bar(int i, int j=0); } public class Foo { void Bar(int i, int j=0) { // do stuff } } 这样可以编译,但是看起来不正确。接口需要具有可选参数,因为否则它将无法正确反映在接口方法签名中。 我应该跳过可选参数,而只使用可为空的类型吗?还是会按预期工作而没有副作用或后果?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.