C# IEnumerable集合项空检查

C# IEnumerable集合项空检查,c#,.net,aspose,aspose.words,C#,.net,Aspose,Aspose.words,我有一个BookmarkCollection类,它是一个IEnumerable继承,用于Aspose Word文档生成器,我必须检查docx文件中的每个硬编码书签,以从该方法获得反馈。我需要检查它是空的还是不填书签。考虑到收藏中有很多书签,我正在寻找更好的方法 private void FillBookmarks(long AppID, BookmarkCollection bs) { if (bs["Bookmark1"] != null) { //fetch

我有一个BookmarkCollection类,它是一个IEnumerable继承,用于Aspose Word文档生成器,我必须检查docx文件中的每个硬编码书签,以从该方法获得反馈。我需要检查它是空的还是不填书签。考虑到收藏中有很多书签,我正在寻找更好的方法

private void FillBookmarks(long AppID, BookmarkCollection bs)
{
    if (bs["Bookmark1"] != null)
    { 
        //fetch data fill it in the docx file for Bookmark1 
    }
    if (bs["Bookmark2"] != null)
    {
        //fetch data fill it in the docx file for Bookmark2 
    }
    if (bs["Bookmark3"] != null)
    {
        //fetch data fill it in the docx file for Bookmark3
    }
    //if statements goes on and on
}
考虑到大量可能的if语句添加,我如何改进

书签集合如下所示:

public class BookmarkCollection : IEnumerable 
{ 
    public int Count { get; } 
    public Bookmark this[int index] { get; } 
    public Bookmark this[string bookmarkName] { get; } 
    public void Clear(); 
    public IEnumerator GetEnumerator(); 
    public void Remove(Bookmark bookmark); 
    public void Remove(string bookmarkName); 
    public void RemoveAt(int index); 
}
提供有关书签的更多信息以及如何处理这些书签: 书签1、2、3是要检索的不同类型的数据,如价格、客户地址、产品名称、供应商等。
当集合包含字符串(即Vendor)时,dosomething方法将从数据库检索数据。

我的代码片段如何。在BookMarkCollection类中创建如下方法

这样你就可以像下面这样写你的if语句了

BookMarkCollection collection = new BookMarkCollection();
collection.DoActionOnFindBookMark("BookMark1", () => { Console.WriteLine("found bookmark1"); });
collection.DoActionOnFindBookMark("BookMark2", () => { Console.WriteLine("found bookmark2"); });

您确实有一个count和一个int索引器,因此使用for循环迭代所有书签应该不会有问题。
这个类是一个IEnumerable,所以你可以说集合中的foreach var b…。根据定义,他们都将是=null。

书签集合是字典吗?IEnumerable非常抽象,它是字符串的集合吗?无论哪种方式,都有可能使它更“优雅”是的,但这取决于“做其他事情”是什么。您可以使用foreachloop@ganilyalcin答案是,如果你需要提供更多信息,然后编辑到您的问题中在这种情况下,我需要创建与if语句一样多的方法。您可以在类中的其他地方编写方法,将书签名称作为参数,然后直接将这些方法传递到这个DoAction方法中。不需要=>语法
BookMarkCollection collection = new BookMarkCollection();
collection.DoActionOnFindBookMark("BookMark1", () => { Console.WriteLine("found bookmark1"); });
collection.DoActionOnFindBookMark("BookMark2", () => { Console.WriteLine("found bookmark2"); });