IEnumerable集合项null检查

时间:2014-08-26 14:54:42

标签: c# .net aspose aspose.words

我有一个BookmarkCollection类,它是Aspose word文档生成器中使用的IEnumerable继承,我必须检查要从此方法提供的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语句添加,我该如何改进

BookmarkCollection就是这样:

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”时,do something方法将从数据库中检索数据。

2 个答案:

答案 0 :(得分:0)

我的片段怎么样?在BookMarkCollection

中创建如下方法
public void DoActionOnFindBookMark(string elementName, Action action)
{
   if (true) // here you have to check for match element
   {
      action();
   }
}

这样您就可以编写if语句,如下所示

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

答案 1 :(得分:0)

你有一个count和一个int索引器,所以使用for循环迭代所有书签应该不是问题。 并且该类是IEnumerable,因此您可以说foreach (var b in collection)…。根据定义,所有这些都将是!= null。