Skip to content

Conversation

@shethaadit
Copy link
Contributor

@shethaadit shethaadit commented Jan 16, 2025

Summary

This PR improves the documentation for optional parameters in C# by:

  • Clarifying the distinction between nullable (T?) parameters and optional parameters with default values.
  • Highlighting that parameters can be both nullable and optional (T? allTheOptionalMeanings = default).
  • Adding examples and notes to address user confusion, ensuring better understanding of the behavior of nullable and optional parameters.
  • Maintaining all existing code snippets as they are already accurate and illustrative.

Fixes #44404


Internal previews

📄 File 🔗 Preview link
docs/csharp/programming-guide/classes-and-structs/named-and-optional-arguments.md Named and Optional Arguments (C# Programming Guide)

@shethaadit shethaadit requested review from a team and BillWagner as code owners January 16, 2025 15:42
@dotnetrepoman dotnetrepoman bot added this to the January 2025 milestone Jan 16, 2025
@dotnet-policy-service dotnet-policy-service bot added dotnet-csharp/svc fundamentals/subsvc community-contribution Indicates PR is created by someone from the .NET community. labels Jan 16, 2025
Copy link
Member

@BillWagner BillWagner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @shethaadit

The changes you've made emphasize the confusion rather than fixing it. A method signature can set the "default" value for an optional parameter. That's a different concept than the "default value" for a type. It also can be different than specifying a "missing" value. Consider this example:

public class Buffer<T>
{
    private T[] _storage;
    
    public Buffer(int size = 10)
    {
        _storage = new T[size];
    }
}

The "default value" for size is 10. That's different than the default value for the int type (that's 0).

@shethaadit
Copy link
Contributor Author

Hi @BillWagner, could you please check once if the updates makes sense?

Copy link
Member

@BillWagner BillWagner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks again @shethaadit

This LGTM, and I'll :shipit: now.

@BillWagner BillWagner enabled auto-merge (squash) January 21, 2025 14:29
@BillWagner BillWagner merged commit ef50ddf into dotnet:main Jan 21, 2025
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community-contribution Indicates PR is created by someone from the .NET community. dotnet-csharp/svc fundamentals/subsvc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clarification needed?

2 participants