Allow null conditional (?.) operator on left hand side of assignment #6072
Replies: 59 comments
-
There has been a previous discussion about this at #1800, though that issue is now closed. |
Beta Was this translation helpful? Give feedback.
-
And that issue was deemed to be a dupe of #34. |
Beta Was this translation helpful? Give feedback.
-
@Joe4evr It was closed that way, but I'm not sure it was actually a duplicate. #34 is part of C# 8.0 and it doesn't let you do what's proposed here. |
Beta Was this translation helpful? Give feedback.
-
I dislike this because the whole line doesn't happen if the LHS is 'null', it is much clearer to wrap this in an |
Beta Was this translation helpful? Give feedback.
-
It makes sense to me, when you have
So, like any conditional access expression, this would naturally fall out as "evaluate what is before the Feels fine and normal to me. it's just something that didn't fall out with how we did the precedence for everything here. |
Beta Was this translation helpful? Give feedback.
-
I've had a brief discussion with @KathleenDollard at Techorama in the Netherlands two weeks ago about this feature. It is not a part of C# 8 right now and we both felt it deserved a feature request of it's own. @Tom01098: I get your point. However I'm also allowed to write: |
Beta Was this translation helpful? Give feedback.
-
@mrjvdveen |
Beta Was this translation helpful? Give feedback.
-
Thanks for your input. I renamed this issue. |
Beta Was this translation helpful? Give feedback.
-
Having improved your title, would you mind removing the "With the introduction of nullable reference types in C# 8 in mind" line in your OP, please? The code, |
Beta Was this translation helpful? Give feedback.
-
Thanks for your input. I have changed the OP. |
Beta Was this translation helpful? Give feedback.
-
I think this has been brought up a couple times before, in short, it comes down to permitting o?.Event += Handler; |
Beta Was this translation helpful? Give feedback.
-
@HaloFour, it's probably best to ignore #1106 though as it was completely derailed by the makeloft troll. Far better to have a new thread that restarts the discussion on the possible merits of allowing |
Beta Was this translation helpful? Give feedback.
-
There are other comments there as well. We shouldn't let one bad actor wreck an entire thread. Even if the conversation continues here I think it's good to link the two issues. |
Beta Was this translation helpful? Give feedback.
-
@HaloFour, I agree on having the link here. It documents the history of the discussion on this subject. |
Beta Was this translation helpful? Give feedback.
-
The error in that code sample is only produced because, currently, the compiler expects that with Properties with setters should allow |
Beta Was this translation helpful? Give feedback.
-
I'll champion this as well. |
Beta Was this translation helpful? Give feedback.
-
Does this proposal also handle the case of using the |
Beta Was this translation helpful? Give feedback.
-
Is it escaping type safety? something must've gone wrong if you are looking for members in a variable that is null as a consumer. but if you are providing the value you can do this in generic and write once apply to all so it seems to me that it's escaping dealing with the consequences of null in consumer's side it's like shorthand for
regardless I still want this feature to be implemented because I want to be lazy and write unsafe code, what can possibly go wrong, at the end of the day I will be blamed for bugs anyways |
Beta Was this translation helpful? Give feedback.
-
It is not a shorthand for either of those cases. The null-conditional operator for any member access operator ( if (foo is not null)
foo.bar = 5; No exceptions involved, because they're too expensive. No type unsafety either, you always account for
Even with your nullability settings and your strong usage of the |
Beta Was this translation helpful? Give feedback.
-
Maybe we can get rid of null in c# by opt-in feature, instead of giving nullable to everything, and having variables points to nullptr they should have a pointer to a static object that's the default state. I feel annoyed when I forgot to check for null and things break during testing too, only if things were never null I can be happier, I understand I can also take a walk outside and stop returning null in new codes I write it isn't a big deal for me |
Beta Was this translation helpful? Give feedback.
-
This is just not happening. You can use the nullability tooling available since C# 8.0/.NET Core 3.1(?) and respect it like you personally desire. Other than that, if you know your values aren't |
Beta Was this translation helpful? Give feedback.
-
New rules ok |
Beta Was this translation helpful? Give feedback.
-
Such a breaking change is probably never going to happen. I like the idea of having a "default" static object, which from what I assume would have to be constructed by the default instance constructor that will be introduced for that feature. It will have to be triggered in some other way though, like This discussion however should be made in the respective proposal. |
Beta Was this translation helpful? Give feedback.
-
I'd always prefer seeing that something's going wrong instead of having it going havoc silently. That's what If I have code that accepts optional parameters or values, that code has to check for Also, |
Beta Was this translation helpful? Give feedback.
-
In your case I would expect it not work (by nothing happens) since the object isn't null but it's the property that wasn't able to be set |
Beta Was this translation helpful? Give feedback.
-
Any Updates? |
Beta Was this translation helpful? Give feedback.
-
@Xyncgas I've championed this. |
Beta Was this translation helpful? Give feedback.
-
I would love to see this! |
Beta Was this translation helpful? Give feedback.
-
I'm converting this issue to a discussion, as #6045 has the template and proposal. |
Beta Was this translation helpful? Give feedback.
-
Consider this code:
I suggest introducing the possibility to write this like so:
Foo?.Bar = "value";
Writing it like this, should do exactly the same as the first example. So if Foo is null, then the assignment never happens.
[Update(jcouv):] Detailed proposal write-up: #6045
Beta Was this translation helpful? Give feedback.
All reactions