Friday, July 15, 2011

Convert the C# type including nullable to F# Option

public static FSharpOption ToFSharpOption(this T obj)
        {
            if (obj.IsNullable())
            {
                var type = Nullable.GetUnderlyingType(typeof(T));
                var result = obj == null ? FSharpOption.None : FSharpOption.Some(obj);
                return result;
            }
            else
            {
                var result = obj == null ? FSharpOption.None : new FSharpOption(obj);
                return result;
            }
        }

        public static bool IsNullable(this T obj)
        {
            if (obj == null)
                return true;
            Type type = typeof(T);
            if (!type.IsValueType)
                return true; //ref type
            if (Nullable.GetUnderlyingType(type) != null)
                return true; // Nullable
            return
                false; // value-type
        }

No comments: