6 ms·
C# Hidden Optimizations
- heresy 16y agoNit: These aren't "optimizations", they're syntactic sugar.
- achew22 16y agoI'm far from impressed with this. How is ?? any different from a guard ( || )? I use that all the freaking time in every language. I've never written a line of C# and even I know about the parallel module, how didn't that make the cut?
- mullr 16y agoC# has || just like any other language, but objects aren't truthy and nulls aren't falsy. This was a good design decision, since it catches the common = vs. == error if(a=b) while doing the type check rather than silently doing the (probably) wrong thing. As a consequence, the || doesn't work as it does in other places. Hence ??.
- steverb 16y ago?? is the null coalescing operator and it's neither new nor is it hidden. It is damned handy though.
- newt 16y agoEvery language? Java, as far as I know, does not allow if (someObject) where someObject is a class type. AFIAK, java only allows that if someObject is a bool, or possibly an int as well. In strongly typed languages in general, null is not the same thing as false and not-null is not the same thing as true.
- oozcitak 16y agoI would say expression trees is one of the less well-known and under-appreciated features of C# 3.0: Expression<Func<int, int>> e = (x) => x + 1; Func<int, int> f = e.Compile(); int b = f.Invoke(42);
- arethuza 16y agoI'm quite fond of C# but that syntax is a bit much when compared to things like humble old JavaScript: var f = function(x) { return x + 1; }; var b = f(42);
- deleted 16y ago[deleted]
- yread 16y agowell you can write it as var f = ((x) => x + 1).Compile(); int b = f.Invoke(42);
- oozcitak 16y agoI don't think that would work. How would the compiler know the type of x and the return type of the lambda expression?
- the_rara_avis 16y agoIt won't. In just about all cases, C# doesn't do backtracking to infer types. See Eric Lippert's posts: http://blogs.msdn.com/b/ericlippert/archive/2010/10/04/no-backtracking-part-one.aspx http://blogs.msdn.com/b/ericlippert/archive/2010/10/04/no-ba...
- profquail 16y agoThe best thing about expression trees isn't that it lets you declare a method like Func<Func<int>, int> = ... (or whatever), but that you can inspect (and modify) the expression tree at runtime. This is what powers LINQ, and the 'static reflection' used by fluent APIs like Fluent nHibernate.
- newt 16y agoThis article is Ok, in an introductory sort of way, but these are not "optimizations" in the sense that they will make your code run faster. They're syntactic sugar as heresy says. They're also not very hidden either.
- Rickasaurus 16y agoHow did this garbage get on the HN front page?