New features for those who haven’t seen them:

// Primary constructors
public class NamedItem(string name)
{
    public string Name => name;
}

// Default lambda params
var IncrementBy = 
    (int source, int increment = 1) => 
        source + increment;

Console.WriteLine(IncrementBy(5)); // 6
Console.WriteLine(IncrementBy(5, 2)); // 7

// Type aliases
using Point = (int x, int y);
  • @[email protected]M
    link
    fedilink
    71 year ago

    Okay, I love these features individually. I loved it when moving from java to kotlin. However, I’m conscerned that these features create multiple ways to do things correctly in C#. Having one way to do things, has been for me one of the best features of C#. It makes it easy to read colleagues code accross generations and easy to onboard new guys.

    I do hope we see these adopted quickly, but I hope the C# folks dot start shoehorning in new syntactic sugar for no good reason. The language is starting to get a bit arcane.

    • Kogasa
      link
      fedilink
      21 year ago

      Any codebase of any complexity will invariably have its own way of doing things. As long as the dialects are mutually intelligible and using one doesn’t make it harder for consuming code to use another, it’s usually not a problem. I don’t think these features are likely to cause these problems.

      • @[email protected]
        link
        fedilink
        21 year ago

        A codebase is different than the language itself enabling many ways to do the thing.

        You may not think it’s likely to cause problems, but have you actually onboarded non c# devs onto new C# projects?

        I have been for the last 6 months and let me tell you it really opened my eyes to new problems. One of those is that there are many ways to do the same thing, which has been a consistent pain point for non-c# devs, and has been hurting adoption and general sentiment.

        Honestly I didn’t think much of it till now, and didn’t think it would be that big of a deal. Turns out it is.

        • Kogasa
          link
          fedilink
          01 year ago

          Onboarding them onto… what? Out of the billions of possible standards and practices to adopt, you are either showing them which to use, or letting them pick. There is usually not a single right way to do something. This isn’t exclusive to C#. Language features are only a tiny subset of the functionality a programming language is used to build.

  • @[email protected]OP
    link
    fedilink
    5
    edit-2
    1 year ago

    In my opinion type aliases shouldn’t use using keyword, since it is used by other useful features, but overall those changes are nice.

    Yes, C# is slowly getting more bloated, like C++, but it’s still a lot better than cpp imo and those changes (especially primary constructors) can remove boilerplate code.

    • Perhyte
      link
      51 year ago

      Type aliases already existed, and already used the using keyword. This version essentially just adds a few new options for the bit after the = (to be specific: tuple types, array types, pointer types, or other unsafe types).

  • Kogasa
    link
    fedilink
    31 year ago

    I’m a bit confused about the point of tuple type aliases. I don’t see a good reason to ever use

    using Point = (int x, int y);
    

    over

    record struct Point(int x, int y);
    

    I guess if you’re working with something that expects a tuple or value tuple, this saves you an explicit conversion from your record type to a tuple.

    • @hurp_mcderp
      link
      11 year ago

      Also, it’s still a tuple so you could simplify existing code without breaking any extension methods you have on them by making a separate type.

      It looks like this was added for flexibility and to make the aliasing system more orthogonal to the type rather than to fill a particular need but who knows.

  • dazfuller
    link
    fedilink
    21 year ago

    Primary constructors I think are getting a bit too much bloat for the language. I get the purpose and I use them in Scala, but it just feels like too many ways to do a simple thing in C#.

    Tuple type aliases FTW

    Just still desperately hoping for Union types

      • dazfuller
        link
        fedilink
        21 year ago

        I heard the same. The number of places I want to use something like an Option<T> instead of having to consider null values… One day though