When we have a Nullable type value and we want to assign it to some control, then we need to check if is not null first.
SomeLabel.Text = object.MyProperty.HasValue ? object.MyProperty.Value : String.Empty;
But if we have many nullable properties? I don't want to copy/paste this check on every line. So we need a method, that checks for nulls. But I also don't want several methods for every type. So we need to use generics.
I created some methods for myself
public static string ValueOrEmptyString<T>(Nullable<T> obj) where T : struct
{
return obj.HasValue ? obj.Value.ToString() : "";
}
public static T ValueOrDefault<T>(Nullable<T> obj, T defaultValue) where T : struct
{
return obj.HasValue ? obj.Value : defaultValue;
}
public static T ValueOrDefault<T>(Nullable<T> obj) where T : struct
{
return obj.HasValue ? obj.Value : default(T);
}
"where T : struct" - is needed for compiler to understand that this method is allowed only for types that belong to System.ValueType.
I can use these methods like that
SomeLabel.Text = ValueOrEmptyString<int>( object.MyIntProperty );
SomeDateTimeControl.Date = ValueOrDefault<DateTime>( object.MyDateTimeProperty );
SomeReferenceControl.SelectedObjecId = ValueOrDefault<int>( object.MyIntProperty, -1 );
No comments:
Post a Comment