Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# how to check for null. (value is null) or (null == value). Can we use `is` operator instead of == operator [duplicate]

C# how to check for null. (value is null) or (null == value). Can we use is operator instead of == operator?

C# 7.0 supports const pattern with is operator. So we can use is null for all null checking ?

Can the object be empty as well besides being null?

like image 574
Shahid Roofi Khan Avatar asked Nov 07 '18 07:11

Shahid Roofi Khan


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.

What is C in C language?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.


1 Answers

Yes, you can use the is operator with the constant pattern of null to check whether a reference (or nullable value type value) is null or not.

Indeed, in C# 7 I would say that using is null is the most idiomatic way of testing for a null value, because it doesn't use any user-defined operators. Consider this:

string x = GetStringFromSomewhere();

if (x == null) { }  // Option 1
if (x is null) { }  // Option 2

Here, option 1 will call the == operator overload defined in string. While that should do what you want (and I expect the JIT compiler will optimize it pretty heavily), it's not like you particularly want to do that - you just want to test whether the value of x is a null reference. That's exactly what option 2 does.

So yes, you can use is null for all null checking if you don't have types that perform odd custom comparisons. It's possible to write a class such that x == null and x is null would give different results, but that would almost always be a design (or implementation) problem.

There's no concept of an object being "empty" - and indeed it's not the object that's null. Leaving nullable value types aside for now, it's a reference that's null, not an object - a null value indicates the absence of an object. It's worth distinguishing carefully between objects and references in your mind.

Some specific object types have a concept of "empty" - for example, a string can be empty, or a collection - but those types have specific ways of testing for emptiness. There's no general concept of an object being empty.

like image 121
Jon Skeet Avatar answered Sep 27 '22 23:09

Jon Skeet