簡體   English   中英

如何檢查給定的 object 是否為空/null 可枚舉?

[英]How to check if given object is an empty / null enumerable?

我有一個要求,我得到一個 object ( System.Object ),我需要檢查 object 是 Z37BDA6259CC0C1DAE 還是空的。 這個 object 可以是值類型/派生自IEnumerable<T>

基本上,我想要一個像這樣的 function:

public void Validator(object val)
{
    // returns true, if non-empty and non-null
}

您可以簡單地將switch表達式與類型模式一起使用:

public bool Validator(object val) => val switch 
{
    null => false,
    IEnumerable e => e.GetType().IsGenericType && e.GetEnumerator().MoveNext(),
    _ => true
};

這僅適用於通用枚舉。 如果您希望它也適用於非泛型枚舉,只需省略e.GetType().IsGenericType &&

public bool Validator(object val) => val switch 
{
    null => false,
    IEnumerable e => e.GetEnumerator().MoveNext(),
    _ => true
};

更正您的方法簽名以返回bool而不是void

public static bool Validator(object val) {
    return val is IEnumerable e && e.Cast<object>().Any();
}

// some tests
var isNull       = Validator(null);                     // false
var isScalar     = Validator(0);                        // false
var isArray      = Validator(new[] { 1 });              // true
var isEmpty      = Validator(new object[] {});          // false
var isNonGeneric = Validator(new ArrayList() { 1, 2 }); // true
var isGeneric    = Validator(new List<int> { 1, 2 });   // true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM