Кажется, чистая инерция. Где это используется, все слишком заняты для изучения IDL или numpy в достаточных деталях для переключения, и не хотят переписывать хорошие рабочие программы. К счастью это не строго верно, но достаточно верно в достаточном количестве мест, что Matlab будет около долгого времени. Как Фортран (в активном использовании, где я работаю!)
Я обычно пишу Метод расширения следующим образом:
public static bool In<T>(this T source, params T[] list)
{
if(null==source) throw new ArgumentNullException("source");
return list.Contains(source);
}
Который можно использовать следующим образом:
if(x.In(1,6,9,11))
{
// do something....
}
public static bool In<T>(this T X, params T[] list)
{
foreach (var item in list)
{
if (X.Equals(item))
return true;
}
return false;
}
Попробуйте следующее
if ( (new []{1,2,33,4,-5,61}).Any(i => x == i) ) {
...
}
bool In<T>(T num, params int args)
{
return (new List<T>(args)).Contains(num);
}
Учитывая, что x - это int, вы можете написать такой метод расширения:
public static bool In(this int i, params int[] values){
foreach(int v in values) {
if (i == v) {
return true;
}
}
return false;
}
string[] possible = new string[3] { 1, 2, 3);
if (possible.Contains(x)) { ...