【问题标题】:checking an array of string objects for null values检查字符串对象数组的空值
【发布时间】:2016-02-25 19:38:43
【问题描述】:

我认为这是一个相当基本的问题,但要么我的大脑还没有醒来,要么我只是太厚了!

我有一个类,它具有下面定义的字符串集合的属性(名称已简化)

public class IdentifierCollection : BaseSubCollection, IIdentifierCollection
{
    public string Id1{ get; set; }
    public string Id2{ get; set; }
    public string Id3{ get; set; }
    // ...      
}

我想在保存之前检查是否有任何属性实际上有一个值,所以我目前正在做这样的事情......

if (string.IsNullOrEmpty(primaryObj.Identifiers?.Id2) &&
    string.IsNullOrEmpty(primaryObj.Identifiers?.Id2) &&
    string.IsNullOrEmpty(primaryObj.Identifiers?.Id3) &&
    string.IsNullOrEmpty(primaryObj.Identifiers?.Id4) &&
    string.IsNullOrEmpty(primaryObj.Identifiers?.Id5) &&
    string.IsNullOrEmpty(primaryObj.Identifiers?.Id6) &&
    string.IsNullOrEmpty(primaryObj.Identifiers?.Id7) &&
    string.IsNullOrEmpty(primaryObj.Identifiers?.Id8))
{

}

只是打字感觉不对!!一定有更好的办法……

【问题讨论】:

  • 为什么你有编号的属性?为什么不使用字典或列表?如果你不能丢失它们,你可以使用反射来查找和检查属性。
  • @CodeCaster 我想知道这是否是 "(names simplfied)" 的效果。如果它不是,那么很可能对 Q 有一个非常不同的答案,即你的建议......
  • 是的,实际名称是我正在研究的名称,但我隐约感到自信
  • 但是使用反射会比丑陋的代码更昂贵......还是不?
  • 您实际上是在某处通过名称访问这些属性,还是字典仍然是一种选择?并定义“昂贵”。是的,反射“相对较慢”,但它由运行时缓存各种对象提供支持。

标签: c# null-check


【解决方案1】:

我不认为这种属性检查有什么问题。使用反射或实现一些接口只是为了能够迭代属性对我来说似乎有点过头了。虽然我同意这么长的陈述作为条件检查看起来很尴尬。为了使代码更具可读性,我会将此检查提取到单独的私有方法中。

if (NoPropIsNullOrEmpty())
{
}

private bool NoPropIsNullOrEmpty()
{
    return !(string.IsNullOrEmpty(primaryObj.Identifiers?.Id2) ||
             string.IsNullOrEmpty(primaryObj.Identifiers?.Id2) ||
             string.IsNullOrEmpty(primaryObj.Identifiers?.Id3) ||
             string.IsNullOrEmpty(primaryObj.Identifiers?.Id4) ||
             string.IsNullOrEmpty(primaryObj.Identifiers?.Id5) ||
             string.IsNullOrEmpty(primaryObj.Identifiers?.Id6) ||
             string.IsNullOrEmpty(primaryObj.Identifiers?.Id7) ||
             string.IsNullOrEmpty(primaryObj.Identifiers?.Id8));
}

【讨论】:

  • 我很想同意,BaseCollection 确实实现了一个索引器,这样我就可以像访问数组一样访问属性,所以 IEnumerable 是有道理的,但最终为了避免一些丑陋的代码行......我已经把它带到了一个辅助方法中,所以我想我太挑剔了!!!
  • “我不认为这种属性检查有什么问题” - 它是复制粘贴代码,因此存在所有缺点。
猜你喜欢
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2018-02-10
相关资源
最近更新 更多