Solved

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

Posted on 2011-09-29
19
420 Views
Last Modified: 2012-06-21
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.
0
Comment
Question by:jazzIIIlove
  • 8
  • 6
  • 2
  • +2
19 Comments
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 72 total points
ID: 36815842
did you declare the variable with:

<type> myobj;

if yes:

<type> myobj = null;

should do it ...
at least, it does for me...
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 36815853
>>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
 
LVL 75

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 286 total points
ID: 36815864
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
ScreenConnect 6.0 Free Trial

At ScreenConnect, partner feedback doesn't fall on deaf ears. We collected partner suggestions off of their virtual wish list and transformed them into one game-changing release: ScreenConnect 6.0. Explore all of the extras and enhancements for yourself!

 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 36815868
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
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36815924
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
 
LVL 75

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 286 total points
ID: 36815947
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
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36815961
i see, ok what about the java perspective?

Regards.
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 36815963
...the pre-compiler is just trying to foreward...
the pre-compiler is just trying to forewarn
0
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36815969
yep, foreward can be also suitable semantically to the sentence :)
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 36816030
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
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36816337
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
 
LVL 47

Assisted Solution

by:for_yan
for_yan earned 142 total points
ID: 36816412
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
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36816552
Ok for both Java and C#;

Any differences between class member scope and function scope?

Regards.
0
 
LVL 47

Assisted Solution

by:for_yan
for_yan earned 142 total points
ID: 36816573

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
 
LVL 75

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 286 total points
ID: 36816726
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
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36816727
Thanks. What about C#?

Kind regards.
0
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36817895
To clarify, what about the difference regarding scopes in C#?

Regards.
0
 
LVL 75

Assisted Solution

by:käµfm³d 👽
käµfm³d   👽 earned 286 total points
ID: 36817932
Did you see my comment three posts above ( http:#36816726 )? Perhaps I am misunderstanding your question.
0
 
LVL 12

Author Comment

by:jazzIIIlove
ID: 36817958
oh, my mistake, sorry.

Kind regards.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

831 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question