【问题标题】:Used Named Optional Parameters for Method用于方法的命名可选参数
【发布时间】:2018-10-22 06:12:47
【问题描述】:

我有一个方法,其中有几个可选的布尔参数,对象的不同属性将根据哪些参数为真而被赋予一个值。

这里是上下文的方法:

public static AutoPatientLookup InitializeTestPatientInfo(bool SSN = false, bool PatientNumber = false, bool Gender = false)
{
    AutoPatientLookup TestAPIParameters = new AutoPatientLookup();
    TestAPIParameters.FirstName = "First";
    TestAPIParameters.LastName = "Last";
    TestAPIParameters.DOB = "4/9/1953";
    TestAPIParameters.PracticeID = 11071;

    if (SSN)
    {
        TestAPIParameters.SSN = 000010281;
    }
    if (PatientNumber)
    {
        TestAPIParameters.PatientNumber = 458;
    }
    if (Gender)
    {
        TestAPIParameters.Gender = "F";
    }

    return TestAPIParameters;
}

但是,有时我希望第二个或第三个布尔参数为真,但我无法将其指定为我想要切换的参数,而无需明确说明前面的参数是真还是假。

如果我想初始化一个具有性别属性值的AutoPatientLookup 对象,我必须这样调用它:

InitializeTestPatientInfo(false,false,true);

我尝试了一些类似

的方法
InitializeTestPatientInfo(Gender = true);

InitializeTestPatientInfo(bool Gender = true);

但似乎没有任何效果。是否有正确的语法来完成我正在尝试的事情?尽管当只有三个布尔参数时初始化语法不是很不方便,但如果有几十个,这可能更适用。

【问题讨论】:

  • Gender:true 等等 顺便说一下,Intellisense 应该会显示给你
  • “c#调用可选参数”之类的东西能找到真是太神奇了-docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…,dotnetperls.com/optional-parameters..无论如何,需要不同的语法,因为C#方法调用支持X(expr),所以@987654330 @ 正在尝试 assign 给 Gender(不存在),然后将赋值表达式的结果传递给方法调用。(这也是 C# 中允许 x = y = z 的原因)。
  • 注意公共方法中的可选参数。阅读my answer here 的第二部分以了解原因。
  • @Steve 您的建议有效,但由于某种原因 Intellisense 没有采纳。
  • 很高兴为您提供帮助 :-)

标签: c# optional-parameters named-parameters


【解决方案1】:

试试

InitializeTestPatientInfo(Gender: true);

【讨论】:

    【解决方案2】:

    您可以命名要分配的参数:

    改为这样做

    InitializeTestPatientInfo(Gender: true);
    

    【讨论】:

      【解决方案3】:

      你要使用的语法是:

      InitializeTestPatientInfo(Gender: true);
      

      【讨论】:

        猜你喜欢
        • 2022-09-28
        • 2019-06-03
        • 1970-01-01
        • 2010-10-27
        • 2010-12-09
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 2018-08-11
        相关资源
        最近更新 更多