dennisdoomen / CSharpGuidelines

A set of coding guidelines for C# 9.0, design principles and layout rules for improving the overall quality of your code development.
https://www.csharpcodingguidelines.com
Other
745 stars 272 forks source link

Umbrella: Leftovers for local functions #92

Closed bkoelman closed 6 years ago

bkoelman commented 7 years ago

Similar to methods, local functions should probably be constrained in their maximum number of parameters (AV1561) and maximum number of statements (AV1500). Tracked by #140.

Likewise, mentions in other rules may need to be expanded to include local functions. In most cases, it should be sufficient to replace "methods" or "members" with: "methods/members and local functions".

Additionally, we may want to provide guidance on when to (not) use local functions:

Discussed in https://github.com/dennisdoomen/CSharpGuidelines/issues/96#issuecomment-335619190:

public IEnumerable<T> Enumerate<T>(IEnumerable<T> items)
{
    if (items == null)
    {
        throw new ArgumentException(nameof(items));
    }

    return InnerEnumerate(items);

    IEnumerable<T> InnerEnumerate(IEnumerable<T> array)
    {
        foreach (var item in array)
        {
            yield return item;
        }
    }
}
dennisdoomen commented 6 years ago

Isn't this already done?

bkoelman commented 6 years ago

We may have occasionally added local functions as part of other work. This issue tracks all potential locations.

I recall you're not such a big fan of them, so I thinks it's best for me to create individual PRs for the places they may make sense. Then you can accept/reject as you see fit.