【问题标题】:C# expression equals multiple values [duplicate]C#表达式等于多个值[重复]
【发布时间】:2015-10-18 22:29:27
【问题描述】:

我确定答案是否定的,但我很好奇,并想我会问你们这些研究人员来确定一下。

在 SQL 中你可以说:

IF ( a IN ( x, y ) )

C#中有类似的东西吗?我知道你可以使用 switch,但我正在寻找 if 语句中特别可能的东西,因为它有多个表达式,例如:

IF ( a == b && c IN ( x, y ) )
IF ( a == b && c == ( x || y ) )

编辑:好的,我看到我过于简化了,因为数组示例相当明显,我没有考虑清楚。如果它是更复杂的东西怎么样:

if ( a.GetType() == typeof( MyClass1 ) || a.GetType() == typeof( MyClass2 ) )

Edit2:澄清一下,这不是 Is there a C# IN operator? 的重复,因为该问题的答案并没有解决我的问题,因为我使用的示例可能有点差,但这是我能想到的唯一关系当时。 Palani Kumar提供的答案就是我一直在寻找的答案。

Edit3:感谢大家的参与。很明显,有很多方法可以达到相同的结果(我现在也明白,它们几乎是相同的东西,只是表达方式不同),我一直由于您的输入,能够进一步阅读每一个。我还设法找到了this "if statements matching multiple values" 帖子,是的,我完全同意它也与我所问的内容重复。根据反馈,我不仅学到了很多东西,而且还设法实施了一个优雅的解决方案:

public static bool In<T>( this T obj, params T[] list )
{
    return list.Contains( obj );
}

【问题讨论】:

  • 例如c的类型是什么?
  • 公平地说,我认为@PalaniKumar 的答案实际上与标记副本中的答案相同。创建集合并使用.Any本质上与创建数组并使用.Contains相同。
  • @MattBurland 谢谢马特,我昨晚也反思了它,它确实开始有意义了。在我提出问题后,我确实找到了一些相关材料,但在此之前,当我进行大量搜索时,我找不到任何东西,这就是为什么我认为答案是否定的,因此我问了
  • @MattBurland 和 Storm .Contains 不适用于所有情况,但 .Any 可以。例如,在我的回答中,“Sample2”不适用于 .Contains。 .Contains 也不能忽略大小写敏感,但 .Any 可以。所以它与标记副本中的答案不同:)
  • @PalaniKumar 哇,这是一些有趣的东西,肯定会阅读更多内容。谢谢!

标签: c# if-statement


【解决方案1】:

Contains 应该满足您的需求

List<char> validChars = new List<char>() { 'x', 'y' };
char a = 'y';

if (validChars.Contains(a))
{
    //do sth.
}

更新更新问题:处理Type 而不是char

List<Type> validTypes = new List<Type>(){ typeof(MyClass1)  ,typeof( MyClass2 )};   
MyClass1 a = new MyClass1();  

if (validTypes.Contains(a.GetType()))
{
    //do sth.
}

【讨论】:

  • 或者如果是数组,使用Array.IndexOf
  • 谢谢@Fubo,如果它变得更复杂怎么办?我已经编辑了我的问题,以尝试或多或少地显示原始问题的提示。
  • @Storm:您编辑的示例并不比这个答案复杂。你只有Type 的集合,而不是char 的集合。您可以使用完全相同的方法。
【解决方案2】:

样本 1:

if (new[] { "String1", "String2" }.Any(x => x == "MyValue"))
{
}

样本 2:

if (new[] { new { Prop1 = "Value1" }, new { Prop1 = "Value2" } }.Any(x => x.Prop1 == "MyValue"))
{
}

示例 3:

if (new[] { typeof(MyClass1), typeof(MyClass2) }.Any(x => x == a.GetType()))
{
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2019-08-25
    • 2018-08-10
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多