假设我有这个方法:
public void DoSomething(object parameter)
因为它接受 object
作为输入、数组和列表以及 IEnumerable<T>
可以传递给它。
我想检查类型并确保它是单个对象,而不是对象集合。
我可以分别检查每个集合的可能性,但是有没有更好的方法来检查它?
最佳答案
注释已引用此内容,但您可以检查该项目是否是 ICollection 或 IEnumerable。
if(parameter is IEnumerable enumerable)
{
// You can access the non-generic list with enumerable
}
请注意,字符串也可以实现此功能。因此,如果您不想要该特定类型,您可以添加 and is not string
到声明。但还要记住,您可以创建自己的类型来实现 IEnumerable,然后它也不会被接受。
我看到您在评论中引用了 javascript。 Javascript,据我所知,只有数组类型。 C# 有多种“列表”类型,其中很大一部分是 IEnumerable,它允许您枚举项目列表。无论是列表、队列、堆栈、数组等都没关系。
您还可以检查ICollection
,或类似 ICollection<object>
或IEnumerable<object>
.
我主要是重复评论中链接答案的答案:Check if Object is Dictionary or List
不过,这样做是一个不好的做法。我感觉这是一个https://xyproblem.info/ ;最好向我们解释一下您为什么要这样做,也许我们可以解决导致您需要此代码的问题。
如果此答案对您没有帮助,请解释原因,以便我们可以更具体。
关于c# - C# 中如何知道给定变量是集合而不是简单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72824432/