object reference null check issue, why not if? but try-catch block?

Hi there;

In my C# application, I want to check whether the object reference is null or not by;

if(myobj == null)
do this;

but C# doesn't let me do so, want me to surround the block with try-catch in runtime for that null value, but i am checking anyways, why is like that?

Isn't there a way to use if check for this?

In C, I was doing like that. It was a problem. In Java, I don't remember.

Could you inform me regarding C# and Java perspective?

Kind regards.
LVL 12
jazzIIIloveAsked:
Who is Participating?
 
Guy Hengel [angelIII / a3]Connect With a Mentor Billing EngineerCommented:
did you declare the variable with:

<type> myobj;

if yes:

<type> myobj = null;

should do it ...
at least, it does for me...
0
 
CEHJCommented:
>>and Java perspective?

Is not a problem. If doThis() throws an exception, then yes, you will need try/catch. I'm guessing it's exactly the same in C#
0
 
käµfm³d 👽Connect With a Mentor Commented:
What is the type of myobj? If it is a value type (e.g. int, byte, char), then checking against null doesn't make sense, and is not permitted. If it is a reference type (e.g. anything defined as class), then you should certainly be able to test for null in that manner.
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

 
käµfm³d 👽Commented:
P.S.

I'm having a bit of difficulty in determining what the target language of the question is. My previous comment is C#-specific  = )
0
 
jazzIIIloveAuthor Commented:
Hi there;

angelIII:
angellll, I believe that you are talking about C#. Ok, you are right. It's working but what is the difference between assigning a null and not? I mean in practice, aren't they the same?

CEHJ:
Your comment seems contradicting angelIII's.

kaufmed:
In C#, my object is a reference type.

I ask Java to populate my thinking.

Regards.
0
 
käµfm³d 👽Connect With a Mentor Commented:
It's working but what is the difference between assigning a null and not?
The pre-compiler will complain about unitialized variables if you don't assign something to a variable defined inside of a block. The initial value will be null if you don't assign anything; the pre-compiler is just trying to foreward you of a potential problem with unitialized variables (i.e. prevent NullReferenceExceptions). Assigning null to a variable tricks the precompiler into thinking you've actually initialized the variable, or it assumes that you know you are, and have a reason for, assigning null to the variable.
0
 
jazzIIIloveAuthor Commented:
i see, ok what about the java perspective?

Regards.
0
 
käµfm³d 👽Commented:
...the pre-compiler is just trying to foreward...
the pre-compiler is just trying to forewarn
0
 
jazzIIIloveAuthor Commented:
yep, foreward can be also suitable semantically to the sentence :)
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
I see the explanation of your question to me has already been given ... it's a compiler warning, basically, to tell you :
watch out, this sounds like it could give you problems ...
0
 
jazzIIIloveAuthor Commented:
But it's not a warning, a runtime error, even i handle it with if check.

So, when is that precompiler working? Build time or only in run time?

Regards.

Regards.
0
 
for_yanConnect With a Mentor Commented:
for Java:

Java compiler would not allow you to use local variable in any way if it is not sure that
some value has bee assigned to it.

So if you say

String s0;

if(s0 == null){do something}

it will give an errorr  of if line : Vraible s00 might not be initialized - aned it is an error - you cannot compile it


even if you say:


int i0=5;
String s0;

if(i0==5) s0 = "five";

if(s0 == null) {do smething} this will still generate thesame error

       


To avoid that you need to initialize like that:

String s0 = null;





0
 
jazzIIIloveAuthor Commented:
Ok for both Java and C#;

Any differences between class member scope and function scope?

Regards.
0
 
for_yanConnect With a Mentor Commented:

In Java instance variables usually have some defaults - so when
they are declaredf they already have defaults, so compiler will not have such issues with instance (class level variables)
You usually encounter these things only with local - method levle, block level variables
0
 
käµfm³d 👽Connect With a Mentor Commented:
Any differences between class member scope and function scope?
In C#, you can essentially think of class-level members as globally scoped, albeit globally scoped to the class. The pre-compiler will still check that a variable has been initialized, but it look for any occurrence of initialization; it will not check to see that a variable has been initialized prior to any given call.
0
 
jazzIIIloveAuthor Commented:
Thanks. What about C#?

Kind regards.
0
 
jazzIIIloveAuthor Commented:
To clarify, what about the difference regarding scopes in C#?

Regards.
0
 
käµfm³d 👽Connect With a Mentor Commented:
Did you see my comment three posts above ( http:#36816726 )? Perhaps I am misunderstanding your question.
0
 
jazzIIIloveAuthor Commented:
oh, my mistake, sorry.

Kind regards.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.