Solved

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

Posted on 2004-10-12
10
207 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
  • 4
  • 3
  • 3
10 Comments
 
LVL 8

Accepted Solution

by:
Razzie_ earned 150 total points
Comment Utility
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
Comment Utility
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_
Comment Utility
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
 
LVL 14

Expert Comment

by:AvonWyss
Comment Utility
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
Comment Utility
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
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

 
LVL 14

Expert Comment

by:AvonWyss
Comment Utility
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
Comment Utility
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_
Comment Utility
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
Comment Utility
>> 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_
Comment Utility
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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
This video discusses moving either the default database or any database to a new volume.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

728 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

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now