C # в VS2005: есть ли обозначение стиля для целых чисел? - PullRequest
2 голосов
/ 29 июня 2010

Для C # в VS2005, вы можете сделать что-то вроде этого:

if number in [1,2..10,12] { ... }

, который проверял бы, содержится ли number в наборе, определенном в квадратных скобках?

Ответы [ 3 ]

1 голос
/ 29 июня 2010

К сожалению нет.

Однако вы можете использовать метод Contains() для List<int>:

List<int> numbers = ...
if (numbers.Contains(2)) { ... }

, если numbers - массив, вы можете либо инициализировать новый List<int> с помощьюзначения массива:

int[] numbers = { 1, 2, 3, 4 };
List<int> newList = new List<int>(numbers);
if (newList.Contains(2)) { ... }

или используйте Array.Exists():

Array.Exists(numbers, delegate(int i) { return i == 2; });
1 голос
/ 29 июня 2010

.NET 2.0 (что и является целью VS 2005) не имеет понятия Set.

.NET 3.5, представленного HashSet<T>, и .NET 4, представленного SortedSet<T>.

Хотя для них нет буквальной формы - хотя инициализаторы коллекции предоставляют что-то слегка подобное:

new HashSet<int> { 1, 2, 4, 12 }

Конечно, вы могли бы просто используйте массив:

int[] values = { 1, 2, 5, 12 };

, но диапазон часть вашего образца - 2..10 - не существует ни в одной версии C #.

0 голосов
/ 29 июня 2010

Вы можете "делать" то, что хотите, используя Enumerable.Range метод:

if (Enumerable.Range(2, 8).Concat(new [] { 1, 12 }).Contains(number)) {
    ....
}

Конечно, это не так читабельно, как в базовом функциональном языке ...

...