Tag: 可选参数

如何在C#中默认参数Guid.Empty?

我想说: public void Problem(Guid optional = Guid.Empty) { } 但编译器抱怨Guid.Empty不是一个编译时间常量。 由于我不想更改API,我不能使用: Nullable<Guid>

命名为可选的关键字参数

我试图将一个长而空的“数据”类转换成命名的元组。 我的课目前看起来像这样: class Node(object): def __init__(self, val, left=None, right=None): self.val = val self.left = left self.right = right 转换为namedtuple后,它看起来像: from collections import namedtuple Node = namedtuple('Node', 'val left right') 但是这里有一个问题。 我原来的类允许我只传入一个值,并通过使用默认值的命名/关键字参数来照顾默认值。 就像是: class BinaryTree(object): def __init__(self, val): self.root = Node(val) 但是这不适用于我的重构命名的元组,因为它期望我通过所有的字段。 我当然可以将Node(val)replace为Node(val, None, None)但不是我喜欢的。 那么是否存在一个很好的技巧,可以使我的重写成功,而不会增加很多代码复杂性(元编程),或者我应该吞下药片并继续进行“search和replace”? 🙂

如何在C#中使用可选参数?

注意:这个问题在C#还没有支持可选参数(即在C#4之前)时被问到。 我们正在构build一个从C#类以编程方式生成的Web API。 这个类有方法GetFooBar(int a, int b) ,API有一个方法GetFooBar它的查询参数是&a=foo &b=bar 。 这些类需要支持可选参数,这在C#语言中是不受支持的。 什么是最好的方法?

C#4.0可选的out / ref参数

C#4.0允许可选的out或ref参数吗?

方法重载与可选参数在C#4.0中

哪一个更好? 一目了然可选参数似乎更好(less代码,lessXML文档等),但为什么大多数MSDN库类使用重载,而不是可选参数? 当您select使用可选参数(或重载)时,是否有任何特殊的事情需要注意?

C#4.0:我可以使用TimeSpan作为默认值的可选参数吗?

这两个都会产生一个错误,说他们必须是编译时常量: void Foo(TimeSpan span = TimeSpan.FromSeconds(2.0)) void Foo(TimeSpan span = new TimeSpan(2000)) 首先,有人可以解释为什么在编译时无法确定这些值吗? 有没有一种方法来指定一个可选的TimeSpan对象的默认值?

传递一个空数组作为可选参数的默认值

如何定义一个函数,将一个空数组的可选数组作为默认值? public void DoSomething(int index, ushort[] array = new ushort[] {}, bool thirdParam = true) 结果是: “数组”的默认参数值必须是编译时常量。

任何方式来指定PHP中的可选参数值?

假设我有一个PHP函数foo: function foo($firstName = 'john', $lastName = 'doe') { echo $firstName . " " . $lastName; } // foo(); –> john doe 有什么办法只指定第二个可选参数? 例: foo($lastName='smith'); // output: john smith

您应该在C#4.0中声明使用重载还是可选参数的方法?

我正在观看Anders关于C#4.0的讨论以及C#5.0的预览 ,这让我想到了C#中可选参数何时可用,推荐的方法是声明不需要指定所有参数的方法。 比如像FileStream这样的类有大约15个不同的构造函数,它们可以被分成逻辑“家族”,比如下面的string, IntPtr和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); 在我看来,这种types的模式可以简化为具有三个构造函数,并使用可选的参数作为可缺省的参数,这将使不同的构造函数族更加清晰[注:我知道这个变化不会是在BCL制造的,我假设这种情况是在说话]。 你怎么看? 从C#4.0开始,将更紧密相关的构造函数和方法组合成一个具有可选参数的单一方法,还是有一个很好的理由来支持传统的多重过载机制?

为什么在接口上定义的C#4可选参数没有被强制实现类?

我注意到,如果在一个接口中指定一个参数为可选参数,那么使用C#4中的可选参数,您不必在任何实现类上使该参数为可选参数: public interface MyInterface { void TestMethod(bool flag=false); } public class MyClass : MyInterface { public void TestMethod(bool flag) { Console.WriteLine(flag); } } 因此: var obj = new MyClass(); obj.TestMethod(); // compiler error var obj2 = new MyClass() as MyInterface; obj2.TestMethod(); // prints false 有谁知道为什么可选参数devise为这样工作? 一方面,我认为能够重写在接口上指定的任何默认值是有用的,不过说实话,我不确定是否应该甚至能够在接口上指定默认值,因为这应该是实现的决定。 另一方面,这种断开意味着你不能总是交替地使用具体的类和接口。 这当然,如果在实现中指定了默认值,那么这个问题就不会成为问题,但是如果你将具体类作为接口公开(使用一些IOC框架来注入具体类),那么真的没有作为调用者必须始终提供默认值的点。