So today I attempted to use C#, my opinion of it has converged with my previous opinion all those years ago. C# is a complete piece of shit that sucks all the life out of coding. Doing anything in this language is an absolute chore. Its verbose to such a ridiculous degree, always whining over some minor thing.
The one thing that really triggered me is the complete inability to declare a simple array of constant struct data. Such a simple task, but in C# it requires such a ridiculous amount of extra syntax.
struct Test { public string x; public int y; }; Test[] test = new Test[] { new Test { x="a", y=1 }, new Test { x="b", y=2 } };
What the fuck is this shit, why the fuck is everything so fucking verbose and hideous in C#, the whole language is like this. Coding in C# causes me physical pain. I converted an entire GUI application from C# to C++ because of shit like this, it just killed me to work with this language. C# does not even have macros, such a verbose language could have really done well with macros, but no. Piece of crap
What I don’t get: If you are comfortable with C++ and know how to get your stuff done with it, why even bother about C#? C# has become an over-engineered trash language in the last 10 years, which added many useful features like Spans or readonly / “const” parameters in the most half assed way ever.
For example, you still cannot declare operators with struct parameters without copies, which would be so needed for Vector or Matrix classes. Instead, you have to write Java-trash like Add(ref Matrix lhs, ref Matrix rhs) non-understandable yaddercrap.
Yes they added “in” parameters but those only work as expected for readonly structs (another yaddayadda enhancement there was absolutely no need for) as the compiler generates “defensive copies” because “it cannot know you may modify it down the call chain”. Sorry but if your compiler is that stupid that it cannot analyze the usage of a parameter in one method with no further method calls then just stop working on all your new bullshit like init-only properties (another solution for a problem that didnt exist) or unnamed new (for yet another stupid way of writing the same trash barely shorter) and get this shit done first.
Oh, you tell me I should make my Matrix a readonly struct as intended for “in” parameters and copy the whole thing just to change one field? With your fantastic garbage “with” syntax? Suuure. Or I make it a class and spam up my heap? Or wait, use record classes now which fake behaving kinda like structs but are the same old class heap trashers? Just another choice showing off a completely fucked up language design. Such great ideas! “But the JIT may optimize it” holy fuck, am I supposed to study your whole virtual machine to know that I can expect it to do what I want?
Then .NET Core / 5 carries a big stick which it wants to shove up your ass called the Generic Host and their DI container. It originated from fucked-up ASP.NET Core and has _somehow_ been untangled enough to have become the “recommended way” to create your applications or piss off when trying to use other libraries plugging into it. Unreadable long-ass concatenated calls try to somehow configure or set up dependency injection in your application. Try to guess the namespace your extension method comes from today! It may be missing in the next version, then start your search anew. I seriously could not have come up with a harder and more stupid way to define such stuff and I’ve honestly never seen anyone accomplishing something even remotely that retarded yet.
And then there’s UI where MS still wants to smear XAML into everyones faces since 14 years. “XAML is so good” if you’re into sadomaso where you shit together loads of 200-character lines of unexpressive XML bullshit to get an ugly, buggy, possibly slow, and typically outdated UI with loads of weird converters, attached properties, control templates, data templates, styles, the last 3 all kinda doing the same but different but still same. You better know the difference between RelativeSource=TemplatedParent and TemplateBinding despite the latter being introduced as a shortcut to the first, but it actually not working in this or that common scenario making you wonder if a bullet to your head wouldn’t be the best solution. That cancer made its way up to WinUI3 which MS can just stick up their butt aswell.
Rumors are someone ran the GC on the current C# language spec. and nothing remained.
Have a nice day.
Eat shit and die, C# is awesome, unlike hideous C++. You can do this:
struct Test(string x, int y) {
public string x = x;
public int y = y;
};
Test[] test = [
new(“a”, 1),
new(“b”, 2),
];
var values = new[] { (“a”, 1), (“b”, 2) };
Agree, been using it for years, then went to JS, went back to C#, fuckin hate it.