如何在C#中计算ICollection中元素的数量?

3

我在我的模型中有以下类:

public class Notebook : TableServiceEntity
{
    public string NotebookLinksJSON { get; set; }

    public string NotebookLinksCount {
        get {
            var a = NotebookLinksJSON.FromJSONString<Notebook.Link>().Details;
            var b = a.Count();
            return NotebookLinksJSON.FromJSONString<Notebook.Link>().Details.Count();
        }
    }

    public class Link
    {
        public Link() {
            _details = new List<Detail>();
        }
        public IList<Detail> Details { 
            get { return _details; } 
        }

        private List<Detail> _details = new List<Detail>();

        public class Detail
        {
            public string L { get; set; }
            public string R { get; set; }
        }

    }
}

我希望有一个属性 NotebookLinksCount,它可以返回 NotebookLinksJSON 字符串中细节的数量。
变量的数据类型如下:
var a = NotebookLinksJSON.FromJSONString<Notebook.Link>().Details;
var b = a.Count();

a is an interface System.Collections.Generic.IList<T>
b is ?? <<< nothing shows when I try to find out what type it is

当我构建时,出现以下错误:
Error   3   Non-invocable member 
'System.Collections.Generic.ICollection<S.Storage.Models.Notebook.Link.Detail>.Count' 
cannot be used like a method.   

有人能给我一些建议,告诉我如何获取NotebookLinks的数量吗?如果NotebookLinksJSON为空,则希望计数返回零。

2个回答

6

Count是一个属性。去掉(),像这样调用:

NotebookLinksJSON.FromJSONString<Notebook.Link>().Details.Count;

编辑:
回答来自评论中的问题@Melissa:为使其在NotebookLinksJSON对象为空的情况下返回null,您需要进行空值检查。

public int NotebookLinksCount {
    get {
        return (NotebookLinksJSON != null) ?
            NotebookLinksJSON.FromJSONString<Notebook.Link>().Details.Count :
            0;
    }
}

我建议将你的NotebookLinksCount属性更改为返回int类型。但如果你真的需要一个字符串,你可以将其更改为字符串类型。

public string NotebookLinksCount {
    get {
        return (NotebookLinksJSON != null) ?
            NotebookLinksJSON.FromJSONString<Notebook.Link>().Details.Count.ToString() :
            "0";
    }
}

Count()也存在,作为LINQ扩展方法。 - Frederik Gheysels
@FrederikGheysels,我认为她试图在非泛型集合上使用System.Linq.Enumerable.Count()扩展方法,所以它仍然可以是一个方法。NotebookLinksJSON.FromJSONString<Notebook.Link>().Details.OfType<Notebook.Link>().Count()应该是我认为的Linq工作代码。 - Ivaylo Slavov
谢谢。我该如何处理没有详细信息的情况?对于字段NotebookLinksJSON为空的情况,我希望计数返回零。 - Samantha J T Star
如果她在 using 语句中引用了 System.Linq 命名空间,它就存在,但它也会发生冲突,在这里使用该属性会更有效率。 - Joel Etherton

0

只需使用 return NotebookLinksJSON.FromJSONString<Notebook.Link>().Details.Count;

你不需要在这里调用 Extension 方法。


谢谢。我该如何处理没有详细信息的情况?对于字段NotebookLinksJSON为空的情况,我希望计数返回零。 - Samantha J T Star
你必须先进行“null”检查!即使你使用了扩展方法,你仍然会遇到异常。因此最好先检查是否为“null”。 - Abdul Munim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接