GrabiCraft Ответов: 2

Или в C# со строкой?


Так что у меня есть совсем новый вопрос:
А что если я хочу сказать что-то вроде:

if (dog != "cat" or "cow")
{
   Console.WriteLine("A dog is not equal to a cow nor a cat!");
}

И "II" не может быть использован, так как я использую строки.

Что я уже пробовал:

Я попробовал II но так как у меня есть струна это не сработает

[no name]

если (собака! = "кошка" & & amp; собака! = " корова")

2 Ответов

Рейтинг:
14

OriginalGriff

Вы должны были бы сказать:

if (dog != "cat" && dog != "cow")
Или
if (!(dog == "cat" || dog == "cow"))


Рейтинг:
12

Matt T Heffron

Если вам нужно будет делать это часто, особенно если есть больше, чем просто пара элементов, то вы должны создать функцию, которая делает это:

public static bool IsOneOf(string s, params string[] many)
{
  if (many == null)
    throw new ArgumentNullException("many");
  return ((IList<string>)many).Contains(s);
}
Вы бы использовали его как:
if (!IsOneOf(dog, "cat", "cow"))
{
   Console.WriteLine("A dog is not equal to a cow nor a cat!");
}
Это довольно просто.
Более продвинутым решением было бы создание универсального метода расширения:
public static class MyExtensionMethods
{
  public static bool IsOneOf<T>(this T s, params T[] many)
  {
    if (many == null)
      throw new ArgumentNullException("many");
    return ((IList<T>)many).Contains(s);
  }
}
Вы бы использовали его как:
if (!dog.IsOneOf("cat", "cow"))
{
   Console.WriteLine("A dog is not equal to a cow nor a cat!");
}
Есть и другие способы сделать это, некоторые оптимизированы для определенных случаев.