c#通用if语句

c#通用if语句,c#,if-statement,C#,If Statement,我有4张单子。它们中有些充满了数据,有些则是空的。 我想做一个IF语句,它只考虑有元素的列表, 如果列表为空,我不希望看到它处于if状态 List<int> list1 = new List<int> {1,2,3 }; List<string> list2 = new List<string>(); List<string> list3 = new List&l

我有4张单子。它们中有些充满了数据,有些则是空的。 我想做一个IF语句,它只考虑有元素的列表, 如果列表为空,我不希望看到它处于if状态


            List<int> list1 = new List<int> {1,2,3 };
            List<string> list2 = new List<string>();
            List<string> list3 = new List<string> { "cc", "cc", "cc" };
            List<string> list4 = new List<string> { "dd", "dd", "dd" };
             

            if (list1.Contains(1) && list2.Contains("bb") && list3.Contains("cc") && list4.Contains("dd"))
            {
                MessageBox.Show("condition okey");
            }

list1=新列表{1,2,3};
List list2=新列表();
List list3=新列表{“cc”、“cc”、“cc”};
List list4=新列表{“dd”、“dd”、“dd”};
如果(列表1.Contains(1)和列表2.Contains(“bb”)和列表3.Contains(“cc”)和列表4.Contains(“dd”))
{
MessageBox.Show(“条件正常”);
}
正如您在代码示例中看到的,list2是空的,我不想将其包含在if语句中。
我从数据库中填写这些列表。我不知道,哪一个是空的

如何编写泛型if语句。 谢谢。

也许您可以使用来确定列表是否包含元素。如果不是,则直接返回true

if ((list1.Count != 0 ? list1.Contains(1) : true )
    && (list2.Count != 0 ? list2.Contains("bb") : true)
    && (list3.Count != 0 ? list3.Contains("cc") : true)
    && (list4.Count != 0 ? list4.Contains("dd") : true))
{
    MessageBox.Show("condition okey");
}
以下是使用通用扩展方法的解决方案:

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
  public static void Main()
  {
    List<int> list1 = new List<int> {1,2,3 };
    List<string> list2 = new List<string>();
    List<string> list3 = new List<string> { "cc", "cc", "cc" };
    List<string> list4 = new List<string> { "dd", "dd", "dd" };

    if (list1.IsEmptyOrContains(1) 
      && list2.IsEmptyOrContains("bb") 
      && list3.IsEmptyOrContains("cc") 
      && list4.IsEmptyOrContains("dd"))
    {
      Console.WriteLine("condition okey");
    }
  }
}

public static class ListExtensions
{
  public static bool IsEmptyOrContains<T>(this List<T> l, T c)
  {
    return !l.Any() || l.Contains(c);
  }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
公共课程
{
公共静态void Main()
{
list1=新列表{1,2,3};
List list2=新列表();
List list3=新列表{“cc”、“cc”、“cc”};
List list4=新列表{“dd”、“dd”、“dd”};
如果(列表1.IsEmptyOrContains)(1)
&&清单2.IsEmptyOrContains(“bb”)
&&清单3.IsEmptyOrContains(“cc”)
&&清单4.IsEmptyOrContains(“dd”))
{
控制台。写入线(“状态正常”);
}
}
}
公共静态类ListExtensions
{
公共静态bool IsEmptyOrContains(此列表l,tc)
{
return!l.Any()| l.Contains(c);
}
}

“我不知道哪一个是空的。”那么,你不知道哪一个不包括在内。你为什么要排除这些条件呢?把它们都放进去有什么不对?@Sweeper数据来自数据库,这是一个erp应用程序。如果一个列表中充满了数据,这意味着它有需求。所以我试着去做。列表2是不是因为它是空的而“ok”?如果是这样,你只需要对每个列表进行额外检查。好的,现在我明白了。你应该把你的问题解释得更清楚。基本上,空列表意味着“列表包含所有内容”,对吗?在每个条件中添加一个
| | listN.IsEmpty
怎么样?我考虑过,但是如果列表list2=新列表{“xx”,“xx”,“xx”};同样,条件为true。对于错误,很抱歉,需要添加
()
@FkBey。此解决方案应该可以工作,就像list2包含xx一样,那么list2.Count将=0,然后考虑List2.包含(“BB”),这将是错误的。我更喜欢我的答案,只是因为它使用了Any而不是Count。对于列表,差异是最小的,但是对于其他可枚举项,.Any会更快,因为它只需要检查是否有1个或多个,其中count可能需要迭代整个可枚举项以获得计数。幸运的是,List优化了count,并且它已经知道了它,所以这里的差别很小。@Kyle Wang没有问题。问题解决了。谢谢您的时间。@RobertMcKee是的,
!list.Any()
是确定列表是否包含元素的更好选择。是。成功了。我的错误是尝试计数法。谢谢您,先生。您可以创建一个扩展方法来封装not any check和contains,这将使它更具可读性,但我只建议您在需要做很多事情时使用扩展方法。@FkBey用扩展方法更新了答案,供您参考。
using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
  public static void Main()
  {
    List<int> list1 = new List<int> {1,2,3 };
    List<string> list2 = new List<string>();
    List<string> list3 = new List<string> { "cc", "cc", "cc" };
    List<string> list4 = new List<string> { "dd", "dd", "dd" };

    if (list1.IsEmptyOrContains(1) 
      && list2.IsEmptyOrContains("bb") 
      && list3.IsEmptyOrContains("cc") 
      && list4.IsEmptyOrContains("dd"))
    {
      Console.WriteLine("condition okey");
    }
  }
}

public static class ListExtensions
{
  public static bool IsEmptyOrContains<T>(this List<T> l, T c)
  {
    return !l.Any() || l.Contains(c);
  }
}