forest4ever Ответов: 4

Множественное условие в C# в условии if


я новичок в c#, прежде чем использовать oracle .
Есть ли более простой способ написать это утверждение if?

if (value==1 | / value==2)

Например... в SQL вы можете сказать where value in (1,2) вместо where value=1 или value=2.
я хочу попробовать вызвать процедуру на основе строки, содержащей определенное значение, например
p_value. startwith("414", " 413")
т. е. p_value - это 41400 или 41300 или 41402 и т. д

пожалуйста, помогите мне

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

я пытался
value. contains ("414", " 412")
{
некоторый код;
}
или value. startwith("414", " 412")
{\некоторый код

PIEBALDconsult

Я бы использовал хэш-набор.

Philippe Mori

Если бы у меня было только 2 условия и я не ожидал, что они изменятся в будущем, я бы остался с вашим оригинальным кодом, который по-прежнему является самым простым для понимания и более эффективным.

4 Ответов

Рейтинг:
21

Midi_Mick

Расширения LINQ, которая имеет два удобных логические методы - любые. Они могут быть использованы для вашей ситуации таким образом:

if (new[]{"414", "412", "410"}.Any(s=>value.StartsWith(s))) {
   // Do your stuff
}


Рейтинг:
2

Kamal Mahendra Sirisena

Вы можете использовать что-то вроде приведенного ниже

using System.Linq;

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


var list = new List<int> { 1, 2, 3, 4, 5 };

if (!list .CheckIn(1,3,4))


forest4ever

Извините, сэр, это не может работать в моей программе . я хочу проверить 3 строки в коде
если подстрока (act_valve, 1, 3) в ("414","412","410")
{
generete_code()
} еще
generate_para()
}
пожалуйста, помогите мне

Рейтинг:
2

#realJSOP

Вот метод расширения, который я написал для себя:

public static bool IsIn(this string str, string container, bool exact=true)
{
    bool result = !string.IsNullOrEmpty(str);
    if (result)
    {
        result = (exact) ? (str          == container)          || container.IndexOf(str) >= 0
                         : str.ToUpper() == container.ToUpper() || container.ToUpper().IndexOf(str.ToUpper()) >= 0;
    }
    return result;
}


Использование будет примерно таким:

string badStuff = "Text,we,don't,want";
string ourData = "text";

bool thisIsFalse = ourData.IsIn(badStuff); // because "text" is lowercase and 
                                           // exact is true

bool thisIsTrue  = ourData.IsIn(badStuff, false); // because exact is false, so 
                                                  // case sensitivity is irrelevant 


Эта идея может быть перенесена в перегрузки этого метода с помощью IEnumerable<string>, или даже IEnumerabe<YourObject>, string propertyname в качестве параметров.

Вы даже можете сделать это с другими типами:

public static bool IsIn(int this value, string container)
{
    return value.ToString().IsIn(container);
}


Рейтинг:
0

#realJSOP

Вот некоторые методы расширения, которые позволяют вам перегружать метод, который я опубликовал ранее.

public static bool IsIn(this string str, IEnumerable<string> list, bool caseSensitive = true)
{
    return (caseSensitive) ? (list.Where(x=>x==str).FirstOrDefault() != null) 
                            : (list.Where(x=>x.ToUpper() == str.ToUpper()).FirstOrDefault() != null);
}

public static bool IsIn<T>(this string str, IEnumerable<T> list, string propertyName, bool caseSensitive = true)
{
    Type itemType = typeof(T);
    PropertyInfo info = itemType.GetPropertyInfo(propertyName, TypeChecker.String);
    if (info == null)
    {
        throw new InvalidOperationException(string.Format("Named property ({0}) is not a string.", propertyName));
    }
    return (caseSensitive) ? (list.Where(x=>info.GetValue(x).ToString()==str).FirstOrDefault() != null) 
                            : (list.Where(x=>info.GetValue(x).ToString().ToUpper() == str.ToUpper()).FirstOrDefault() != null);
}