IEnumerable集合项null检查
本文关键字:检查 null 集合 IEnumerable | 更新日期: 2023-09-27 18:19:32
我有一个BookmarkCollection类,它是Aspose words文档生成器中使用的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
方法将从数据库中检索数据。
我的代码段怎么样。在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"); });
您确实有一个count和一个int索引器,因此使用for循环迭代所有书签应该不会有问题。这个类是一个IEnumerable,所以你可以说foreach (var b in collection)…
。根据定义,他们都会是=无效的