如何从 IList<> 获取项目计数得到作为一个对象?

发布于 2024-12-29 06:01:54 字数 303 浏览 2 评论 0 原文

在一个方法中,我得到一个对象

在某些情况下,这个对象可以是“某物”的IList(我无法控制这个“某物”)。

我正在尝试:

  1. 识别该对象是一个 IList (某物)
  2. object 转换为“IList”能够从中获取Count

目前,我陷入困境并寻找想法。

In a method, I get an object.

In some situation, this object can be an IList of "something" (I have no control over this "something").

I am trying to:

  1. Identify that this object is an IList (of something)
  2. Cast the object into an "IList<something>" to be able to get the Count from it.

For now, I am stuck and looking for ideas.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不…忘初心 2025-01-05 06:01:54

您可以使用 is 检查您的对象是否实现了IList

然后,您可以将 object 转换为 IList 来获取计数。

object myObject = new List<string>();

// check if myObject implements IList
if (myObject  is IList)
{
   int listCount = ((IList)myObject).Count;
}

You can check if your object implements IList using is.

Then you can cast your object to IList to get the count.

object myObject = new List<string>();

// check if myObject implements IList
if (myObject  is IList)
{
   int listCount = ((IList)myObject).Count;
}
橘亓 2025-01-05 06:01:54
if (obj is ICollection)
{
    var count = ((ICollection)obj).Count;
}
if (obj is ICollection)
{
    var count = ((ICollection)obj).Count;
}
只怪假的太真实 2025-01-05 06:01:54
        object o = new int[] { 1, 2, 3 };

        //...

        if (o is IList)
        {
            IList l = o as IList;
            Console.WriteLine(l.Count);
        }

这会打印 3,因为 int[] 是一个 IList。

        object o = new int[] { 1, 2, 3 };

        //...

        if (o is IList)
        {
            IList l = o as IList;
            Console.WriteLine(l.Count);
        }

This prints 3, because int[] is a IList.

多像笑话 2025-01-05 06:01:54

由于您想要的只是计数,因此您可以利用以下事实:任何实现 IList 的东西也实现 IEnumerable;此外,System.Linq.Enumerable 中有一个扩展方法,它返回任何(通用)序列的计数:

var ienumerable = inputObject as IEnumerable;
if (ienumerable != null)
{
    var count = ienumerable.Cast<object>().Count();
}

Cast 的调用是因为开箱即用 非泛型 IEnumerable 上没有 Count

Since all you want is the count, you can use the fact that anything that implements IList<T> also implements IEnumerable; and furthermore there is an extension method in System.Linq.Enumerable that returns the count of any (generic) sequence:

var ienumerable = inputObject as IEnumerable;
if (ienumerable != null)
{
    var count = ienumerable.Cast<object>().Count();
}

The call to Cast is because out of the box there isn't a Count on non-generic IEnumerable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文