在C#中转换为任何类型的泛型

时间:2014-10-22 11:22:52

标签: c# generics casting

我有object value可能代表不同类型的对象(字符串,枚举,列表等)。我想要做的是检查变量是否为空列表,如下所示:

(value is List<object> && ((List<object>)value).Count == 0)

(value is List<dynamic> && ((List<dynamic>)value).Count == 0)

但是真正的空列表都返回false 我想知道最好的方法是什么,以及在C#中是否有像Java List<?>这样的东西。

2 个答案:

答案 0 :(得分:3)

您可以将其投放到IList

if( (value as IList).Count == 0 )

如果您不确定该值是否实现IList,最好检查null:

var list = value as IList;
if(list != null && list.Count == 0)

答案 1 :(得分:0)

您可以创建一个帮助程序类:

public static class CollectionHelpers
{
    public static bool IsNullOrEmpty(this ICollection collection)
    {
        return collection == null || collection.Count == 0;
    }
}

并像这样使用它:

class Program
{
    static void Main(string[] args)
    {
        object list = new List<int> { 1, 2, 3 };
        Console.WriteLine((list as ICollection).IsNullOrEmpty());
    }
}

class Program
{
    static void Main(string[] args)
    {
        var list = new List<int>();
        Console.WriteLine(list.IsNullOrEmpty());
    }
}