DB ORM

kennytm kennytm at gmail.com
Fri Aug 12 07:39:02 PDT 2011


zhang <bitworld at qq.com> wrote:
>> Graham Fawcett wrote.
>>> On Thu, 11 Aug 2011 20:10:15 +0800, zhang wrote:
>>> 
>>>>>> I think D needs user defined attributes first.
>>>> 
>>>> About attribute, here is an example:
>>>> 
>>>> ....
>>>> 
>>>> There is a problem that is D's basic type is not nullable. In C#,
>>>> the nullable integer type can be defined as "Int?" or
>>>> "Nullable<int>".
>>> 
>>> You don't need attributes for that: you can just define a "struct
>>> Nullable(T)" that wraps the value, and provides a way to express a
>>> null value.
>>> 
>>>     struct Person {
>>>       int ID;           // required
>>>       Nullable!int age; // optional
>>>       ...
>>>     }
>>> 
>>>     void foo(Person p) {
>>>       if (p.age.isNull) ...
>>>       else writeln(p.age + 100);
>>>     }
>>> 
>>> Graham
>> 
>> Alternatively you just use a class to wrap the value:
>> 
>> template Nullable(T){
>>     static if(is(T == class)) alias T Nullable;
>>     else class Nullable{T v; alias v this;}
>> }
>> 
>> 
>> The benefit of this approach is that you don't have to invent new ways to test for
>> null values.
> 
> That's it. So, the nullable basic type is not a problem. Thanks.
> ----------
> Zhang <bitworld at qq.com>

There used to be std.typecons.Nullable, but was disabled. Can you please
check if there's any improvements to
https://github.com/D-Programming-Language/phobos/pull/153?


More information about the Digitalmars-d mailing list