繁体   English   中英

C#处理集合中项目的优雅方法

[英]C# Elegant way to handle checking for an item in a collection

我在下面发布了代码示例。 首先让我解释一下

以下代码中的termStore.Groups是组对象的集合(确切的类无关紧要)。

检查null:如果(termStore.Groups [groupName] == null)似乎是一种逻辑(干净)的方法,但是如果Groups集合为空,则会产生异常。

使用termStore.Groups.Contains也不是一种选择,因为这需要强类型,即:.Contains(Group)...不是.Contains(GroupName as string)

有人可以推荐一种干净的/通用的方式来检查项目是否存在于集合中。

谢谢....

TermStore termStore = session.TermStores.Where(ts => ts.Name == termStoreName).FirstOrDefault();
                if (termStore.Groups[groupName] == null)
                {
                    termStore.CreateGroup(groupName);
                    termStore.CommitAll();
                }

更新:确切的类Sharepoint分类法类。 http://msdn.microsoft.com/zh-CN/library/microsoft.sharepoint.taxonomy.group.aspx

更新2,确切的集合: http : //msdn.microsoft.com/en-us/library/microsoft.sharepoint.taxonomy.groupcollection.aspx

Microsoft.SharePoint.Taxonomy.GroupCollection实现IEnumerable<Group> ,因此,一些LINQ可能正是医生订购的:

if(termStore.Groups.Any(x => x.Name == "MyGroup"))
{
   // group contains at least one item matching the predicate.
}
else
{
   // group contains no items matching the predicate.
}

您需要使用.NET 3.5或更高版本,并添加“ using System.Linq;”。 到文件顶部。

编辑

如果您没有可用的LINQ,或者如果它冒犯了您,或者如果您确实进行了分析并发现与字符串索引器相比,遍历Groups会降低性能,则可以使用GroupCollection.Count来避免出现错误状态:-

if (termStore.Groups.Count == 0 || termStore.Groups[groupName] == null)
{
  // Group doesn't exist.
}

IEnumerable.Any(...)应该适合您的情况:

termsStore.Groups.Any()

我认为这是您要寻找的:

termStore.Groups.ContainsKey(groupName)

检查密钥是否存在,如果不存在,则不引发异常。 假设Groups是实现IDictionary的集合。

可能是这个

termStore.Any() && termStore.Groups.Any() && termStore.Groups[groupName] == null

好,第二次尝试。 如果网上论坛不包含必需的ContainsKey方法,则可以自己编写。 然后,您可以只使用ContainsKey代替Contains。

static class GroupExtensions
{
   public static bool ContainsKey(this Groups groups, string key) 
   {
      try
      {
         if(groups[key] == null)
         {
            return false;
         }
      }
      catch
      {
         return false;
      }
      return true;
   }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM