La vieille remarque complètement gratos.
Surtout venant d'un mec qui ne sais pas coder correctement.
La solution à ton pb n'est pas lié au langage, mais à ta façon de coder.
Pour savoir si c'est initialisé, il suffit de mettre une valeur par défaut non utilisée (ex : DateTime.MinValue), et de vérifier au moment où tu le veux que cette valeur a changé.
L'avantage c'est que ça marche pour tout (types référence ou valeur), et que si jamais dans les version ultérieur du framework, la valeur par défaut change, tu es assuré de la compatibilité ascendante.
Note : ca marche aussi en Java, C++, C, et j'en passe.