创建一个具有不同底层类型的Nullable对象数组?

时间:2013-12-13 13:22:10

标签: c#

我有许多不同类型的可以为空的对象(例如DateTime?Guid?)我想要检查一个值。

我想避免这样的代码:

return SomeGuid.HasValue || SomeBool.HasValue || SomeDateTime.HasValue

但似乎无法创建Nullable<object>数组。我希望能做到这样的事情:

return new Nullable<object>[] { SomeGuid, SomeBool, SomeDateTime }.Any(o => o.HasValue);

2 个答案:

答案 0 :(得分:4)

根据定义,

object可以为空。

以下是有效的:

Guid? guid = null;
bool? boolean = null;
DateTime? date = DateTime.Now;

var test = new object[] { guid, boolean, date }.Any(o => o != null);

请注意Nullable<T>要求Tstruct,即类型(不是参考类型)。 object引用类型。

答案 1 :(得分:1)

有点复杂,但您可以使用统一的界面包装可空对象,如下所示:

interface INullableWrapper
{
    bool HasValue { get; }
    object Value { get; } // Careful: boxing!
}

class NullableWrapper<T> : INullableWrapper
    where T : struct
{
    public T? Nullable { get; private set; }

    public bool HasValue { get { return this.Nullable.HasValue; } }

    object INullableWrapper.Value { get { return this.Nullable.Value; } }

    public T Value { get { return this.Nullable.Value; } }

    public NullableWrapper(T? nullable)
    {
        this.Nullable = nullable;
    }
}

return new INullableWrapper[] { new NullableWrapper<int>(5), new NullableWrapper<string>("Hello") };