zhang <bitwo...@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 <bitwo...@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?