我有许多不同类型的可以为空的对象(例如DateTime?
,Guid?
)我想要检查一个值。
我想避免这样的代码:
return SomeGuid.HasValue || SomeBool.HasValue || SomeDateTime.HasValue
但似乎无法创建Nullable<object>
数组。我希望能做到这样的事情:
return new Nullable<object>[] { SomeGuid, SomeBool, SomeDateTime }.Any(o => o.HasValue);
答案 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>
要求T
为struct
,即值类型(不是参考类型)。 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") };