C# 将可选参数传递给方法
我试图将可选参数传递给方法,但很难理解为什么它不起作用。这里最流行的答案是public void SomeMethodint a,int b=0。所以我在下面也尝试了同样的方法 我能把这里的其他语句处理掉吗?我的意思是,我可以使用另一个参数=如果不是另一个参数=可选的吗?如果它存在,方法将获取它,如果不存在,则跳过它 下面是使用else语句的代码: 上面的代码是我需要的,它工作得很好。我的问题更像是有没有更好的办法 以下是我的想法,但它不起作用:C# 将可选参数传递给方法,c#,C#,我试图将可选参数传递给方法,但很难理解为什么它不起作用。这里最流行的答案是public void SomeMethodint a,int b=0。所以我在下面也尝试了同样的方法 我能把这里的其他语句处理掉吗?我的意思是,我可以使用另一个参数=如果不是另一个参数=可选的吗?如果它存在,方法将获取它,如果不存在,则跳过它 下面是使用else语句的代码: 上面的代码是我需要的,它工作得很好。我的问题更像是有没有更好的办法 以下是我的想法,但它不起作用: using System; public cl
using System;
public class Program
{
public static void Main()
{
int MyNumber = 6;
string StringOne;
string StringTwo;
if (MyNumber != 5)
{
StringOne = "Number is not 5";
StringTwo = "True that!";
}
CheckNumber(StringOne, StringTwo);
}
public static void CheckNumber(string StringOne = "", string StringTwo = "")
{
Console.WriteLine(StringOne + "\n" + StringTwo);
}
}
未在中分配变量:CheckNumberStringGone、StringTwo
我在想,我可以使用string StringOne=使参数可选,但这似乎不是解决方案?在您的特定情况下,您不需要使方法的参数可选,只需要将变量初始化为您想要使用的默认值:
int MyNumber = 6;
string StringOne = ""; // <--
string StringTwo = ""; // <--
if (MyNumber != 5)
{
StringOne = "Number is not 5";
StringTwo = "True that!";
}
CheckNumber(StringOne, StringTwo);
警告一句:请不要将此视为邀请您继续并显式初始化所有变量。只有在有充分理由这样做的情况下才应该这样做,因为这会增加我忘记将此变量设置为错误的正确值类型的可能性,否则C编译器的赋值检查会捕获这些错误。在您的特定情况下,您不需要将方法的参数设置为可选,您只需将变量初始化为要使用的默认值:
int MyNumber = 6;
string StringOne = ""; // <--
string StringTwo = ""; // <--
if (MyNumber != 5)
{
StringOne = "Number is not 5";
StringTwo = "True that!";
}
CheckNumber(StringOne, StringTwo);
警告一句:请不要将此视为邀请您继续并显式初始化所有变量。只有在有充分理由这样做的情况下才应该这样做,因为这会增加我忘记将此变量设置为错误的正确值类型的可能性,否则C编译器的赋值检查会捕获错误的值类型。字符串是引用类型,所有引用类型的默认值都为null
尝试将StringOne和StringTwo初始化为String。empty该字符串是引用类型,所有引用类型的默认值均为null
尝试将StringOne和StringTwo初始化为String.empty初始化项对的另一种方法是使用C8元组语法,例如:
int MyNumber = 6;
(string StringOne, string StringTwo) =
MyNumber != 5 ? ("Number is not 5", "True that!")
: ("", "" );
CheckNumber(StringOne, StringTwo);
初始化项目对的另一种方法是使用C8元组语法,例如:
int MyNumber = 6;
(string StringOne, string StringTwo) =
MyNumber != 5 ? ("Number is not 5", "True that!")
: ("", "" );
CheckNumber(StringOne, StringTwo);
调用CheckNumber以使用optional。您拥有的很好。optional意味着您可以在方法调用中省略参数,而不是在您提供emptyCall CheckNumber以使用optional时它将使用该默认值。您拥有的很好。optional意味着您可以在方法调用中省略参数,并不是说当你提供空的东西时它会使用默认值,但显然它的效率比使用if/else要低一些,因为如果MyNumber不是5,字符串首先被初始化为其他字符串,然后再被重新分配给其他字符串。我建议OP保持代码的原样。@MatthewWatson:这取决于OP的用例。在许多情况下,可读性和代码简单性比微小的性能微优化更重要。我同意代码清晰性很重要,这就是为什么我个人在这种情况下更喜欢显式if/else。YMMV.@MatthewWatson:我同意变量初始化应该谨慎使用,以查看我当前对答案的编辑。这是可行的,但显然比使用if/else效率低一些,因为如果MyNumber不是5,字符串首先被初始化为其他字符串,然后再重新分配给其他字符串。我建议OP保持代码的原样。@MatthewWatson:这取决于OP的用例。在许多情况下,可读性和代码简单性比微小的性能微优化更重要。我同意代码清晰性很重要,这就是为什么我个人在这种情况下更喜欢显式if/else。“YMMV.@MatthewWatson:我同意变量初始化应该谨慎使用,以查看我当前对答案的编辑。”。