【问题标题】:IEnumerable collection item null checkIEnumerable 集合项空检查
【发布时间】:2014-08-26 14:54:42
【问题描述】:

我有一个 BookmarkCollection 类,它是 Aspose 单词文档生成器中使用的 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 是要检索的不同类型的数据,例如价格、客户地址、产品名称、供应商等。 当集合中有字符串即“供应商”时,do something 方法将从数据库中检索数据。

【问题讨论】:

  • 书签集合是字典吗?
  • IEnumerable很抽象,是不是string的集合?
  • 无论哪种方式,都可能有办法让它更“优雅”,是的,但这取决于do something else 是什么。
  • 你可以使用foreach循环
  • @ganilyalcin 如果您需要提供更多信息,答案是不要,然后编辑您的问题

标签: c# .net aspose aspose.words


【解决方案1】:

我的 sn-p 怎么样。在 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"); });

【讨论】:

  • 在这种情况下,我需要创建与 if 语句一样多的方法。
  • 您可以在类中的其他位置编写方法,将书签名称作为参数,然后简单地将这些方法直接传递给此 DoAction 方法。 (不需要“()=>”语法)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2017-05-28
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多