Tag: 可选参数

是否可以在c#中的lambda表达式中使用可选/默认参数?

有没有办法在c#中使用带有lambda表达式的 可选参数 (默认参数)? 我已经阅读了文档,但却找不到任何说法。 为了说明,我可以定义使用可选参数提供默认值的简单方法,如下所示: void MyMethod(string arg = “default-value”) { Console.WriteLine(arg); } 我想知道的是,如果我能够使用lambda表达式做同样的事情。 // gives a syntax error Action MyMethod = (arg = “default”) => Console.WriteLine(arg); 我可以使用委托使用默认值的可选参数,但这看起来有点笨拙。 delegate void MyDelegate(string arg = “default”); MyDelegate MyMethod = arg => Console.WriteLine(arg); 或者我可以检查lambda体中的参数,例如… Action MyMethod = (arg) => Console.WriteLine(string.IsNullOrEmpty(arg) ? “default” : arg); 但这再次看起来有点笨拙。 是否可以使用可选参数在c#中的lambda表达式中设置默认值?

具有可选参数的Web服务方法

可能重复: 我是否可以为ASP.NET SOAP Web服务提供可选参数 我试过四处寻找,但我真的找不到合适的解决方案。 很抱歉重复,因为我知道之前有人问过这个问题。 我有一个Web服务方法,我想在其中有一个可选参数,例如: public void MyMethod(int a, int b, int c = -3) 我已经知道我不能使用可空参数,所以我只想尝试使用默认值。 问题是,当我调用此方法而不提供参数时,c仍然会获得exception。 有什么地方我必须指定它实际上是可选的吗? Thanksю

托管C ++ / CLI方法中的可选参数

当在C#中使用时,如何在C ++ / CLI中声明具有可选参数的托管方法? 我使用Optional和DefaultParameterValue属性修饰了参数(请参阅: 如何编码默认参数值 ),但只有Optional属性才被尊重。 C ++ / CLI: public ref class MyClass1 { public: MyClass1([System::Runtime::InteropServices::Optional] [System::Runtime::InteropServices::DefaultParameterValue(2)] int myParam1) ↑ { System::Console::WriteLine(myParam1); } }; C#: var myInstance1 = new MyClass1(); // compiles and runs 输出 : 0 预期产出: 2 Visual C#IntelliSense: MyClass1.MyClass1([int myParam1 = 0]); // wrong default value ↑ 编辑:仔细观察反汇编程序会发现C ++ / […]

有没有理由在接口中声明可选参数?

您可以在接口方法中声明可选参数,但不需要实现类来将参数声明为可选参数,正如Eric Lippert解释的那样 。 相反,您可以在实现类中将参数声明为可选参数,但不能在接口中声明。 那么有什么理由在接口中声明可选参数吗? 如果没有,为什么允许? 例子: public interface IService1 { void MyMethod(string text, bool flag = false); } public class MyService1a : IService1 { public void MyMethod(string text, bool flag) {} } public class MyService1b : IService1 { public void MyMethod(string text, bool flag = true) { } } public interface IService2 { void […]

委托可以有一个可选参数吗?

我有下面的代码工作正常,直到我尝试添加bool NetworkAvailable = true部分。 现在我在下面第4行得到一个Method name expected编译时exception。 void NetworkStatus_AvailabilityChanged(object sender, NetworkStatusChangedArgs e) { var networkAvailable = e.IsAvailable; SetUpdateHUDConnectedMode d = new SetUpdateHUDConnectedMode(UpdateHUDConnectedMode(networkAvailable)); this.Invoke(d); } delegate void SetUpdateHUDConnectedMode(bool NetworkAvailable = true); private void UpdateHUDConnectedMode(bool NetworkAvailable = true) { … } 无可否认,我是Delegates和Optional Parameters新手,所以我将不胜感激。 谢谢。

是否应该添加或删除这些参数?

当Resharper与自己争论时,如何知道哪个角色更可信? 我想我发现一些代码确实让Resharper感到困惑(这显然是一个非常不寻常的案例 – 在使用它一天之后,我认为Resharper是蜜蜂的膝盖/自从液化面包以来最好的东西等)。 使用这行代码: ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(SecretKey.GetBytes(32), SecretKey.GetBytes(16)); Resharper告诉我“添加参数名称’rgbkey’”然后“添加参数名称’rgbIV’” 那么这条线就是: ICryptoTransform Encryptor = RijndaelCipher.CreateEncryptor(rgbKey: SecretKey.GetBytes(32), rgbIV: SecretKey.GetBytes(16)); 然而,当我再次运行Resharper时,它说, “冗余参数名称规范” – “删除参数名称规范”(rgbkey) (然后是rgbIV)。 似乎两种方式都可行,但……

检查inside方法是否传递了一些可选参数

如何检查是否将可选参数传递给方法? public void ExampleMethod(int required, string optionalstr = “default string”, int optionalint = 10) { if (optionalint was passed) return; } 另一种方法是使用Nullable.HasValue ( MSDN定义 , MSDN示例 ): int default_optionalint = 0; public void ExampleMethod(int required, int? optionalint, string optionalstr = “default string”) { int _optionalint = optionalint ?? default_optionalint; }

C#中的可选委托

这是两个扩展方法重载的简单示例 public static class Extended { public static IEnumerable Even(this List numbers) { return numbers.Where(num=> num % 2 == 0); } public static IEnumerable Even(this List numbers, Predicate predicate) { return numbers.Where(num=> num % 2 == 0 && predicate(num)); } } 通过将委托设置为可选,我希望能够将它们合并为一个: public static class Extended { public static IEnumerable Even(this List numbers, Predicate predicate […]

如何将可空类型传递给P /被调用函数

我有几个p /被调用的函数(但我现在正在重写我的代码所以我正在整理)我想知道如何使用/传递一个可空类型作为参数之一。 使用int类型不是问题,但给出以下内容: [DllImport(“setupapi.dll”, CharSet = CharSet.Auto, SetLastError = true)] static extern IntPtr SetupDiGetClassDevs(ref Guid ClassGuid, int? enumerator, IntPtr hwndParent, uint Flags); 我希望能够将Guid参数作为可空类型传递。 目前我可以将其称为: SetupDiGetClassDevs(ref tGuid, null, IntPtr.Zero, (uint)SetupDiFlags.DIGCF_PRESENT ); 但我需要第一个参数也可以作为null传递。

我是否可以为ASP.NET SOAP Web服务提供可选参数

我想用这个签名构建一个web服务,如果param2留空,它不会抛出exception。 这可能吗? [WebMethod] public string HelloWorld(string param1, bool param2) { } exception是在尝试将空字符串转换为布尔值时抛出的System.ArgumentException。 到目前为止没有奏效的想法: Web服务不允许使用方法重载,例如 public string HelloWorld(string param1) { return HelloWorld(param1, false); } 如下所示: 让bool自杀的bool? 。 同样的例外。 操纵WSDL,看到这个答案 我的问题与这个问题有关 ,但唯一的答案是WCF合同,我还没有使用过。