Solved

Null value types?  (requires an expert of genius proportions)

Posted on 2004-10-12
10
212 Views
Last Modified: 2010-04-15
.NET offers value types to describe primitive values such as int, boolean, double, etc.  But there is no reference types of offered - I see this as problematic because I am unable to represent a primitive variable as null.  I realize I can box a value type, but then I lose type safety.

For example - if I had a "Person" object with an "Age" property that returned an Int32 - I cannot set the "Age" to null.  So if, for example, a user chose NOT to provide their age I would have to set it to some arbitrary value that I could interpret as "not set", such as -1.  But then, every bit of code that needs to determine whether "Age" was "set" would have to know that "-1" is the magic number that means "not set".

To resolve this I have created my own reference type implementations of the .NET primitives.  And, although they solve my problem, it is a drag that I use my proprietary solution rather than Microsoft offering a more global solution.

I'm hoping that my problem is a result of my lack of understanding of .NET.  Otherwise, I'll be really disappointed in Microsoft (again) :(

-M
0
Comment
Question by:mattizzle
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
10 Comments
 
LVL 8

Accepted Solution

by:
Razzie_ earned 150 total points
ID: 12288556
From the C# 2.0 language specification: nullable value types: http://download.microsoft.com/download/8/1/6/81682478-4018-48fe-9e5e-f87a44af3db9/NullableTypesProposal.pdf

It's an interesting read!
0
 
LVL 14

Expert Comment

by:AvonWyss
ID: 12288594
As Razzie noted, the new .NET framework and the C# 2.0 compiler will support this.

If you write your own class, you lose much of the performance which is given when using value types. I'd rather use a special value; I tend to use the MinValue member for such things if needed.
0
 
LVL 8

Expert Comment

by:Razzie_
ID: 12288647
I can be mistaken btw, but I don't believe a language like Java supports nullable value types? So you'd experience these problems in other languages, too.

There are a lot of people who wonder if nullable value types is indeed a good idea.
0
PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

 
LVL 14

Expert Comment

by:AvonWyss
ID: 12288689
Well, Java also has these wrappers for value types, which are the counterparts to the boxed .NET objects. These are nullable, but are in fact not nullable value types, but normal objects wrapping a value type. I think that nullable value types can be a userful feature, but one should have to do a explicit cast to assign a nullable value type to a non-nullable value type in my opinion.
0
 
LVL 2

Author Comment

by:mattizzle
ID: 12288838
Right - I realize that there is no such thing as a nullable value type.  What I meant was a reference equivalent of a value type that can be set to null.  Like Java's Integer, Long, and Double objects.
0
 
LVL 14

Expert Comment

by:AvonWyss
ID: 12288872
In the currently released versions, there is only the variant of boxing them which comes out-of-the box. Everything more sophisticated or type-safe needs to be written by the programmer... but usually, there are ways to prevent the use of nullable types alltogether, like using flags, etc.
0
 
LVL 2

Author Comment

by:mattizzle
ID: 12288923
Razzie - thanks for the article, I'll check it out and get back to you.  I called microsoft about this problem about 18 months ago - I wonder if my complain was taken into consideration when this document was published?  B^)  

Anyway - you mentioned that "There are a lot of people who wonder if nullable value types is indeed a good idea".  I guess my opinion is that the solution doesn't have to be nullable value types, but at least a global solution to differentiating a "set" and "not set" value type.  And, aside from inherant performance issues with reference type implementations, do you know of any other arguments against it?

-Matt
0
 
LVL 8

Expert Comment

by:Razzie_
ID: 12289156
What I meant more is that a lot of people wonder if nullable types are a good addition to the C# language in general. The big argument is if it is REALLY needed. Sure it can be useful, but C# works perfect as it is. Some argument that adding nullable value types can only mess things up, your code is more open for errors, the syntax is confusing, will it be implemented right? Read the nullable types specification and you'll know it gets very complex, especially with all the new rules and operators.

int? i; // nullable type
int x = (int)i;

is not valid. Confusing? maybe :)

Like AvonWyss said, it can be good for numerous things, for example database operations, but it irrevocably bring some problems unless you fully understand how it works.
0
 
LVL 2

Author Comment

by:mattizzle
ID: 12289713
>> it can be good for numerous things, for example database operations
I've never written an application for a client that didn't write to a database; so I say it is absolutely necessary that a language provide this support.

>> but C# works perfect as it is
So, how many shares of Microsoft stock /do/ you own? ;)

>> C# Nullable Types article
I've skimmed the article and it is good to see that they are moving in the right direction.  I am not sure that the solution is the way I would go, but then again I am partial to Java ;)  

What do I need to do to take advantage of this feature?  Is it ready for production use?

My two cents:
I think if Microsoft integrated a reference type with implicit conversion and overloaded binary and unary operators, they would be on to something.  I realize there is a performance trade-off there, but will probably not be noticable in your everyday run-of-the-mill enterprise client application.  And, for those applications that need to optimize, they are still free to use primitives.

-M

0
 
LVL 8

Expert Comment

by:Razzie_
ID: 12290178
I have no affiliation with Microsoft whatsoever, lol.
The article is an interesting read yes, but while reading you do get the feeling that is much more complicated than you thought it would be (at least I did).

The 2.0 Framework is still in developement thus Beta. I thought it was planned for March 2005 but I could be wrong there. Maybe it will be released with Longhorn. You can go here for more info: http://msdn.microsoft.com/netframework/downloads/updates/default.aspx for SDK's. VS.NET 2005 Beta (light edition) is available here: http://lab.msdn.microsoft.com/vs2005/ - I believe 2005 is integrated with the 2.0 framework.

I'd wish it was possible to use Int32 someInt = null which would seem pretty logical, unfortunately it isn't :)
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
Come and listen to Percona CEO Peter Zaitsev discuss what’s new in Percona open source software, including Percona Server for MySQL (https://www.percona.com/software/mysql-database/percona-server) and MongoDB (https://www.percona.com/software/mongo-…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…

705 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