Console.WriteLine("Вот вам массив:");
for(int i = 0; i ‹ firstNames.Length; i++) Console.Write("Имя: {0}\t", firstNames[i]);
Console.WriteLine("\n");
// Инвертирование порядка в массиве и печать.
Array
Console.WriteLine("Вот вам инвертированный массив:");
for (int i = 0; i ‹ firstNames.Length; i++) Console.Write("Имя: (0}\t", firstNames[i]);
Console.WriteLine("\n");
// Очистка всех данных, хроме Baldy.
Console.WriteLine("Очистка всех данных, кроме Baldy…");
Array.Clear(firstNames, 1, 3);
for (int i = 0; i ‹ firstNames.Length; i++) Console.Write ("Имя: {0}\t", firstNames[i]);
Console.ReadLine();
}
Обратите особое внимание на то, что при вызове метода Clear() для массива оставшиеся элементы массива не сжимаются в меньший массив. Для подвергшихся очистке элементов просто устанавливаются значения по умолчанию. Если вам нужен контейнер динамического типа, поищите подходящий тип в пространстве имен System.Collections.
Исходный код. Проект Arrays размещен в подкаталоге, соответствующем главе 3.
Типы с разрешением принимать значение null
Вы уже видели, что типы данных CLR имеют фиксированный диапазон изменения. Например, тип данных System.Boolean может принимать значения из множества {true, false}. В .NET 2.0 можно создавать
static void Main(string[] args) {
// Ошибка компиляции!
// Типы, характеризуемые значением, не допускают значений null!
bool myBool = null;
int myInt = null;
}
Чтобы определить переменную типа nullable, к обозначению типа данных в виде суффикса добавляется знак вопроса (?). Такой синтаксис оказывается допустимым только тогда, когда речь идет о типах, характеризуемых значениями, или массивах таких типов. При попытке создать ссылочный тип (включая строковый) с разрешением значения null вы получите ошибку компиляции. Подобно переменным без разрешения принимать значение null, локальным переменным с таким разрешением тоже должны присваиваться начальные значения.
static void Main(string [] args) {
// Несколько определений локальных типов
// с разрешенными значениями null.
int? nullableInt = 10;
double? nullableDouble = 3.14;
bool? nullableBool = null;
char? nullableChar = 'a';
int?[] arrayOfNullableInts = new int?[10];
// Ошибка! Строки являются ссылочными типами!
string? s = "ой!";
}
Суффикс ? в C# является сокращенной записью для указания создать переменную структуры обобщённого типа System.Nullable‹T›. Мы рассмотрим обобщений в главе 10, а сейчас важно понять то, что тип System.Nullablе‹Т› предлагает ряд членов, которые могут использовать все типы с разрешением значения null. Например, используя свойство HasValue или операцию !=, вы можете программным путем выяснить, содержит ли соответствующая переменная значение null. Значение, присвоенное типу с разрешением значения null, можно получить непосредственно или с помощью свойства Value.
Работа с типами, для которых допустимы значения null