Sacaldur meint, dass man Value Types auf null setzen kann. Bestes Beispiel ist z.B. DateTime in C#. Es ist ein ValueType und muss somit als Parameter immer gesetzt sein und kann nicht null sein, so wie int. Mit Nullables geht sowas. Letztendlich ist es ein generischer Typ, der den Wert zur verfügung stellen kann. Das sieht dann so aus:
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
public void DoSomething(DateTime ?optionalTimeStamp = null)
{
if (optionalTimeStamp.HasValue())
{
//do something
var value = optionalTimeStamp.Value;
}
else
{
//do something without timestamp.
}
}
|
Wenn du das Fragezeichen weglässt, dann kompiliert der Code nicht, weil DateTime ebend ein Value Type ist. Noch schöner finde ich sowas zum Beispiel für so etwas:
|
C#-Quelltext
|
1
2
3
4
5
6
|
public void FindEvent(EventType eventType, DateTime ?optionalTimeStamp = null)
{
var minialEventTime = optionalTimeStamp.GetValueOrDefault(DateTime.MinValue);
_allEvents.Where(e => e.Type == eventType && e.TimeStamp >= minimalEventTime);
}
|
EIne Methode zum finden von Events aus einer Liste nach Typ, mit optional einem minialem TimeStamp oder nicht. GetValueOrDefault liefert den Wert, wenn optionalTimeStamp gestetzt ist (ungleich null), ansonsten wird der angegebene Default geliefert. Das ist ziemich elegant und sehr praktisch.
Ansonsten finde ich die idee von Parameternamen klasse! Erhöht oftmals sehr die lesbarkeit. Ich verwende es manchmal auch für Methoden, wo die angabe des Parameters die Lesbarkeit erhöht.