Tag: optional parameters

为什么我不能将string.Empty用作与空引号相反的可选参数?

我正在改进我的代码并注意到在某些地方我有可选参数,其默认值为空字符串。 我将其更改为类中的默认值为空字符串,猜猜是什么! 显然,空引号和string.Empty之间存在差异。 什么鸭子?! (打字错误) private void Khaboom(String parameter = “”) { … } private void Bazinga(String parameter = String.Empty) { … } 有人可以向我解释为什么鸭子做Khaboom工作而Khaboom不工作?! 错误消息引发了这样的错误: ‘parameter’的默认参数值必须是编译时常量。 嗯…… 是的 !

如何创建可选的DateTime参数?

我有这个函数返回一个引用类型。 现在,这个函数有两个可选参数,它们都是DateTime类的实例。 function是这样的: public DateTime GetDate(DateTime start = DateTime.MinValue, DateTime end = DateTime.MinValue) { // Method body… } VS的错误是: ‘start’的默认参数值必须是编译时常量 当然,错误适用于第二个参数,我完全理解发生了什么。 我真正想要的是知道是否有办法解决这个问题,即在方法中有可选参数。 现在,我所做的就是创造一个过载; 我的意思是,我创建了一个无参数函数GetDate()和它的双参数重载。 这不是一个真正的问题,但我只是想知道是否有办法做到这一点。

方法中的可选参数不是使用Rectangle编译时常量错误

我有一个方法,我想使用一个Rectangle可选参数,默认值为(1,1,1,1)。 void Method(int i, int j = 1, Rectangle rect = new Rectangle(1,1,1,1)) {} //error 我该如何解决这个问题? (我正在使用XNA,所以它是一个Microsoft.Xna.Framework.Rectangle 。)

如何获取可选参数的默认值?

我有一个带可选参数的构造函数。 我想有一个表达式来调用该构造函数而不提供可选参数(我的意思是让对象使用参数的默认值构造)。 我在这里阅读表达式树可能不包含使用可选参数的调用或调用 ,这是不可能的。 我的意思是 var ctorInfo = getIt; var f = Expression.Lambda<Func>(Expression.New(ctorInfo)).Compile(); 使用System.TypeInitializationException失败。 好的,我会传递默认值。 但是如何获取参数的默认值? ctorInfo.GetParameters().Select(?? 动机:学习目的,没有现实世界的应用。 编辑:编辑表达式树标记,因为它不在构建表达式的上下文中,一般也有效。

除了null之外,为什么我不能将默认值作为可选参数?

我想要一个可选参数并将其设置为我确定的默认值,当我这样做时: private void Process(Foo f = new Foo()) { } 我收到以下错误( Foo是一个类): ‘f’是Foo的类型,除string之外的引用类型的默认参数只能用null初始化。 如果我将Foo更改为struct那么它可以工作,但只有默认的无参数构造函数。 我阅读了文档,它清楚地表明我不能这样做,但它没有提到为什么? ,为什么这个限制存在,为什么string被排除在外呢? 为什么可选参数的值必须是编译时常量? 如果这不是一个常数那么副作用会是什么?

C# – 调用具有所有默认参数的结构构造函数

今天我在创建一个包含大量数据的struct时遇到了这个问题。 这是一个例子: public struct ExampleStruct { public int Value { get; private set; } public ExampleStruct(int value = 1) : this() { Value = value; } } 看起来很好,花花公子。 问题是当我尝试使用此构造函数而未指定值并希望将参数的默认值1使用时: private static void Main(string[] args) { ExampleStruct example1 = new ExampleStruct(); Console.WriteLine(example1.Value); } 此代码输出0并且不输出1 。 原因是所有结构都具有公共参数构造函数。 所以,就像我在Main调用this()我的显式构造函数一样, new ExampleStruct()实际调用ExampleStruct()但不调用ExampleStruct(int value = 1)时会发生同样的事情。 因为它这样做,它使用int的默认值0作为Value 。 更糟糕的是,我的实际代码是检查int value […]

可选参数和inheritance

我理解可选参数,我非常喜欢它们,但我想更多地了解如何使用inheritance接口。 图表A interface IMyInterface { string Get(); string Get(string str); } class MyClass : IMyInterface { public string Get(string str = null) { return str; } } 现在我认为MyClass中的Get方法inheritance了接口的两个方法,但是…… ‘MyClass’没有实现接口成员’MyInterface.Get()’ 这有充分的理由吗? 也许我应该通过在您说的界面中添加可选参数来解决这个问题? 但是这个呢? 图表B interface IMyInterface { string Get(string str= “Default”); } class MyClass : IMyInterface { public string Get(string str = “A different string!”) { […]

方法参数数组默认值

在c#中,可以在方法中使用默认参数值,例如: public void SomeMethod(String someString = “string value”) { Debug.WriteLine(someString); } 但现在我想使用数组作为方法中的参数,并为其设置默认值。 我以为它应该看起来像这样: public void SomeMethod(String[] arrayString = {“value 1”, “value 2”, “value 3”}) { foreach(someString in arrayString) { Debug.WriteLine(someString); } } 但这不起作用。 有没有正确的方法来做到这一点,如果这甚至可能的话?

C#可选参数或方法重载?

由于C#添加了可选参数,因此使用可选参数或方法重载被认为是更好的做法,或者是否存在您希望使用其中一个的特定情况。 即具有许多参数的函数更适合w /可选参数?

添加可选参数后的System.MissingMethodException

在一个组件中有一个可选参数后,我收到System.MissingMethodException的错误,并且调用它的另一个组件没有构建,因为它使用旧的参数调用它。 只有添加参数的组件才会构建为已部署的补丁。 调用组件是旧的,因为它没有变化。 当调用组件运行时,它会给出错误: 例外信息 exception类型:System.MissingMethodException消息:找不到方法:’LabelURLs IPSD.BnB.Transaction.Postage.GetLabelURLs(System.String)’。 数据:System.Collections.ListDictionaryInternal TargetSite:Void GenerateScanForm(Int32,Int32)HelpLink:NULL源:BnBDispenseQueueProcess 据我所知,它不应该引发错误,因为新参数是可选的。 调用组件(EXE)作为Windows服务运行的另一件事。 我们找到了一个非常有线的解决方法来让它运行。 通过删除更改的组件一次并运行调用组件,这将说明找不到DLL。 再次放置相同的DLL并调用组件工作正常:)。 我想我错过了.net的一些内部。 如果需要更多信息,请告诉我。