Hacker News new | ask | show | jobs
by amir734jj 1689 days ago
I do not like that "global using" as well. I wonder why they added it.
3 comments

Looks like they added global usings to support their implicit usings functionality. Essentially they want to save people having to put using System, System.Linq, System.Collections.Generic, and others[0] at the top of nearly every C# file.

I'm of two minds:

- I think they're an anti-pattern, because it creates a global scope that can get messy/annoying.

- It makes a ton of sense for the implicit usings functionality, and I'm tired of needing to add the basic SDK usings to every source file.

So the ideal is to enable .Net's implicit usings, then to use an analyzer to "ban" adding more global usings directly from your solution/project. Best of both worlds that way. Alternatively just make them a no-pass item for code reviews.

[0] https://docs.microsoft.com/en-us/dotnet/core/compatibility/s...

It's literally the same as Rust's prelude system and I don't see anyone complaining so much about this.
Rust doesn't have anywhere near the following of C#, so there probably aren't enough opinionated people in the community to mention it on an HN post
> Essentially they want to save people having to put using System, System.Linq, System.Collections.Generic, and others[0] at the top of nearly every C# file.

Interesting that this doesn't bother me at starting from .net 1.0. All tools (including raw VS without addins) can add those using automatically and they do.

But for me it's still a nice to have feature if VS will be able to show where this using is defined.

This is what I’ve settled on. Implicit usings for the SDK are great but otherwise I don’t want this in any code base I work on.
Because most files in C# start with:

using System; using System.Collections.Generic;

and a few more lines like that. Think of this part of the BCL as the prelude in Haskell.

It's an easy way to do a config without a full importer and complexity in passing config around / looking it up.

I like it. This goes way back. They give the example of a globalusings file.

That's a cheap / easy way to do a config file (at least one use case).