All articles

Nullable típusok attributumokban

Published 2012-09-11 - Last modified 2012-09-11

Original: https://soci.hu/blog/index.php/2012/09/11/nullable-tipusok-attributumokban/

CLR attributumokban sajnos nem lehet használni nullable típusokat, mivel ezeket metaadatként tárolja el a compiler, és az nincs felkészítve struktúrákra. Igazából még a decimalt sem eszi, ami elég bosszantó, ez azért beleférhetett volna.
Most mégis kellett nullable és ráadásul decimal att param, így kerültem ki:

public class SteppingSpecificationAttribute : Attribute
{
private double increment;
private double startValue;
private double endValue;

public SteppingSpecificationAttribute(double defaultValue)
{
DefaultValue = defaultValue;
}

public bool HasValueIncrement { get; private set; }
public bool HasValueStartValue { get; private set; }
public bool HasValueEndValue { get; private set; }

public double Increment
{
get { return increment; }
set
{
increment = value;
HasValueIncrement = true;
}
}

public double StartValue
{
get { return startValue; }
set
{
startValue = value;
HasValueStartValue = true;
}
}

public double EndValue
{
get { return endValue; }
set
{
endValue = value;
HasValueEndValue = true;
}
}

public double DefaultValue { get; set; }
}

Nem elegáns, de működik. Valakinek van jobb ötlete?

Később, amikor kiveszem a property-k értékét, akkor nézem meg, mi null és mi nem, valamint akkor konvertálok decimalra. A double-decimal konverzió okozhat adatvesztést, de ismerem milyen számok mennek be, ezekkel nincs ilyen gond.