How do I check if a given object is nullable in other words how to implement the following method…
bool IsNullableValueType(object o) { ... }
I am looking for nullable value types. I didn’t have reference types in mind.
//Note: This is just a sample. The code has been simplified //to fit in a post. public class BoolContainer { bool? myBool = true; } var bc = new BoolContainer(); const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance ; object obj; object o = (object)bc; foreach (var fieldInfo in o.GetType().GetFields(bindingFlags)) { obj = (object)fieldInfo.GetValue(o); }
obj now refers to an object of type bool (System.Boolean) with value equal to true. What I really wanted was an object of type Nullable<bool>
So now as a work around I decided to check if o is nullable and create a nullable wrapper around obj.
There are two types of nullable –
Nullable<T>and reference-type.Jon has corrected me that it is hard to get type if boxed, but you can with generics: – so how about below. This is actually testing type
T, but using theobjparameter purely for generic type inference (to make it easy to call) – it would work almost identically without theobjparam, though.But this won’t work so well if you have already boxed the value to an object variable.
Microsoft documentation: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/nullable-types/how-to-identify-a-nullable-type