- Практикум по программированию на C# 2
- Лекция 2.1. Управление ресурсами в .NET. Сборка мусора
- Промежуточный тест 2
Выберите верное утверждение для метода GetGeneration(Object) класса System.GC.
Метод приводит в действие механизм сборки мусора. Перегруженные версии метода позволяют указать поколение объектов, вплоть до которого надо произвести сборку мусора
Данный метод позволяет определить номер поколения, к которому относится переданный в качестве параметра объект
Метод возвращает объем памяти в байтах, который занят в управляемой куче
Этот метод приостанавливает работу текущего потока до освобождения всех объектов, для которых производится сборка мусора
Метод информирует среду CLR о выделении большого объема неуправляемой памяти, которую надо учесть при планировании сборки мусора
Среди предложенных ниже утверждений выберите те, которые верны для понятия «сборщик мусора».
Когда сборщик мусора работает, другие потоки приложения прекращают работать
Добавляет финализируемые недостижимые объекты во freachable-очередь
Сборщик мусора освобождает ресурсы и память для объектов, хранящихся в куче
Сборщик мусора работает в своем собственном потоке и обычно запускается автоматически
Изучите представленный ниже код, укажите верный ответ.
public class Program
{
public static void Main()
{
SortedList<int,string> numberNames = new SortedList<int,string>()
{
{3, "Three"},
{1, "One"},
{2, "Two"},
{5, "Five"},
{4, "Four"},
};
numberNames.RemoveAt(10);
foreach(var kvp in numberNames)
Console.WriteLine("key: {0}, value: {1}", kvp.Key , kvp.Value );
}
}
В консоль будет выведено сообщение:
key: 1, value: One
key: 2, value: Two
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five
Runtime exception: ArgumentOutOfRangeException
В консоль будет выведено сообщение:
key: 1, value: One
key: 2, value: Two
key: 4, value: Four
key: 5, value: Five
В консоль будет выведено сообщение:
key: 2, value: Two
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five
Какие из перечисленных утверждений верны применительно к ссылочным типам?
Память быстро выделяется и освобождается. Управление памятью является относительно недорогой операцией
Размещаются в куче
Объект может быть уничтожен, его деструктор сработает, а его ресурсы высвободяться только тогда, когда последняя ссылка на объект исчезнет
Могут приводить к фрагментации памяти. Управляются сборщиком мусора
Ссылочный тип может иметь несколько ссылок на один и тот же объект
Укажите утверждения, которые верны применительно к управлению ресурсами.
Паттерн dispose является шаблоном проектирования, позволяющим высвободить неуправляемые ресурсы, используемые классом, контролируемо и своевременно
Сборщик мусора автоматически восстанавливает память и ресурсы для управляемых объектов
Сборщик мусора связан с управляемыми объектами и не знает, как освободить ресурсы, связанные с неуправляемыми объектами
Некоторые неуправляемые типы используют буферы памяти для повышения производительности и записывают в базовый источник данные только тогда, когда буфер либо полон, либо флеширован
Внимательно изучите код и укажите верные утверждения.
public class Derived: Base
{
private bool IsDisposed = false;
protected override void Dispose(bool disposing)
{
if (IsDisposed) return;
if (disposing)
{
// Освобождение управляемых ресурсов
}
IsDisposed = true;
// Обращение к методу Dispose базового класса
base.Dispose(disposing);
}
}
После вызова метода Dispose необходимо блокировать у объекта вызов метода Finalize с помощью GC.SuppressFinalize
После завершения метода Test и удаления из стека ссылки на объект Person в куче происходит немедленная очистка памяти и вызов деструктора
При создании производных классов от базовых, которые реализуют интерфейс IDisposable, следует также вызывать метод Dispose базового класса
Деструктор следует реализовывать только у тех объектов, которым он действительно необходим, так как метод Finalize оказывает сильное влияние на производительность
Выберите верные утверждения применительно к классу System.GC.
Через статические методы данный класс позволяет обращаться к сборщику мусора
Метод AddMemoryPressure информирует среду CLR о выделении большого объема неуправляемой памяти, которую надо учесть при планировании сборки мусора
Наиболее распространенным случаем его использования является сборка мусора при работе с неуправляемыми ресурсами, при интенсивном выделении больших объемов памяти, при которых необходимо такое же быстрое их освобождение
Метод WaitForPendingFinalizers приостанавливает работу текущего потока до освобождения всех объектов, для которых производится сборка мусора
Внимательно изучите код. Что будет выведено в консоль?
public class Program
{
public static void Main()
{
var cities = new Hashtable(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};
cities.Clear();
Console.WriteLine(cities.Count);
}
}
В консоль будет выведено сообщение:
3
В консоль будет выведено сообщение:
0
В консоль будет выведено сообщение:
2
Throws runtime exception: KeyNotFoundException
Выберите верные утверждения для понятия «значимые типы».
Могут приводить к фрагментации памяти. Управляются сборщиком мусора
Новые элементы перезаписывают старые, память освобождается автоматически, фрагментация памяти невозможна
Когда объект в стеке выходит из области видимости, память, используемая этим объектом, будет немедленно освобождена
Управляемые типы обычно создаются в стеке
Память быстро выделяется и освобождается. Управление памятью является относительно недорогой операцией
Внимательно изучите представленный ниже код и выберите верные утверждения.
class MyResourceWrapper: IDisposable
{
public void Dispose()
{ Console.WriteLine("*****In Dispose!*****");
}
}. . .
MyResourceWrapper rw = new MyResourceWrapper();
rw.Dispose();
Сборщик мусора не имеет понятия об интерфейсе IDisposable и потому никогда не будет вызывать метод Dispose
Избавляет от других содержащихся внутри и пригодных для очистки объектов
При вызове метода Dispose пользователем объект будет все еще существовать в управляемой куче и иметь доступ ко всем остальным находящимся там объектам
Метод Dispose отвечает не только за освобождение неуправляемых ресурсов типа, но и за вызов аналогичного метода в отношении любых других содержащихся в нем высвобождаемых объектов
Внимательно изучите данный код и выберите верные утверждения.
class Program
{
static void Main(string[] args)
{ Test();
}
private static void Test()
{ Country country = new Country();
country.x = 10;
country.y = 15;
}
}
class Country
{ public int x;
public int y;
}
Выберите один или несколько ответов:
Сборщик мусора запускается в то время, когда среда CLR обнаружит в этом потребность, например, когда программе потребуется дополнительная память
В методе Test создается объект Country. С помощью оператора new в куче для хранения объекта CLR выделяет участок памяти, а в стек добавляет адрес этого участка памяти
Сборщик мусора запускается сразу после удаления из стека ссылки на объект, размещенный в куче
В главном методе Main вызывается метод Test. После того, как Test отработает, место в стеке очищается, а сборщик мусора очищает ранее выделенный под хранение объекта Country участок памяти
Укажите верные утверждения для понятия «деструктор».
Метод деструктора носит имя класса, перед которым стоит знак тильды (~)
Деструкторы всегда вызываются только сборщиком мусора, и их нельзя вызывать напрямую из кода
Деструктор имеет тот же модификатор доступа, что и класс
Деструктор не может иметь модификаторов доступа
Укажите утверждения, справедливые в отношении понятия «шаблон dispose».
Интерфейс IDisposable определяет единственный метод Dispose, не принимающий никаких параметров
Является шаблоном проектирования, позволяющим высвободить неуправляемые ресурсы, используемые классом, контролируемо и своевременно
Реализация в типе этого шаблона будет способствовать тому, что приложения будут хорошо работать и не сохранять неуправляемые ресурсы дольше, чем это необходимо. .NET Framework, предоставляя интерфейс IDisposable и объект, реализующий этот интерфейс, должен следовать этому паттерну
Вместо переопределения метода Finalize в качестве альтернативного варианта в классе можно реализовать интерфейс IDisposable
Сопоставьте метод класса GC с его описанием.
Collect |
· Форсирует сборку мусора |
AddMemoryPressure |
· Информирует исполняющую среду о выделении большого объема неуправляемой памяти, которую необходимо учесть при планировании сборки мусора |
RemoveMemoryPressure |
· Информирует исполняющую среду, что высвобожден большой блок неуправляемой памяти и ее больше не требуется учитывать при планировании сборки мусора |
ReRegisterForFinalize |
· Запрашивает финализатор для объекта, который уже завершен или завершение которого было подавлено |
WaitForPendingFinalizers |
· Приостанавливает текущий поток до тех пор, пока все объекты в freachable-очереди не будут завершены |
SuppressFinalize |
· Предотвращает завершение объекта, переданного в качестве параметра |
- Приостанавливает текущий поток до тех пор, пока все объекты в freachable-очереди не будут завершены
- Информирует исполняющую среду, что высвобожден большой блок неуправляемой памяти и ее больше не требуется учитывать при планировании сборки мусора
- Информирует исполняющую среду о выделении большого объема неуправляемой памяти, которую необходимо учесть при планировании сборки мусора
- Предотвращает завершение объекта, переданного в качестве параметра
- Форсирует сборку мусора
- Запрашивает финализатор для объекта, который уже завершен или завершение которого было подавлено
Изучите представленный ниже фрагмент кода и укажите верные утверждения.
FileStream fs = new FileStream("myFile.txt", FileMode.OpenOrCreate);
Fs.Close();
Fs.Dispose();
Некоторые из типов библиотек базовых классов, реализуя интерфейс IDisposable, предусматривают использование псевдонима для метода Dispose, чтобы заставить отвечающий за очистку метод звучать более естественно для типа, в котором он определяется
При вызове метода Dispose пользователем объект будет все еще существовать в управляемой куче и иметь доступ ко всем остальным находящимся там объектам
Класс System.IO.FileStream реализует интерфейс IDisposable и, следовательно, поддерживает метод Dispose, но при этом в классе определяется метод Close, применяемый для той же цели
Вызов метода Dispose не разрушает объект, он остается существовать и после выполнения метода Dispose
Изучите приведенный ниже код и укажите верный ответ.
public class Program
{
public static void Main()
{
var cities = new Dictionary<string, string>(){
{"UK", "London, Manchester, Birmingham"},
{"USA", "Chicago, New York, Washington"},
{"India", "Mumbai, New Delhi, Pune"}
};
cities["UK"] = "Liverpool, Bristol"; // update value of UK key
cities["USA"] = "Los Angeles, Boston"; // update value of USA key
//cities["France"] = "Paris"; //throws run-time exception: KeyNotFoundException
if(cities.ContainsKey("France")){
cities["France"] = "Paris";
}
foreach(var kvp in cities)
Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);
}
}
В консоль будет выведено сообщение:
Key: Liverpool, Bristol
Key: Los Angeles, Boston
Key: Mumbai, New Delhi, Pune
В консоль будет выведено сообщение:
Value: Liverpool, Bristol
Value: Los Angeles, Boston
Value: Mumbai, New Delhi, Pune
В консоль будет выведено сообщение:
Key: UK, Value: Liverpool, Bristol
Key: USA, Value: Los Angeles, Boston
Key: India, Value: Mumbai, New Delhi, Pune
Runtime exception: ArgumentOutOfRangeException
Какие утверждения верны применительно к понятию «деструктор»?
Нельзя добавить деструктор структуре или любому другому типу значения. Типы значения хранятся в стеке, и сборщик мусора к ним не применяется
Деструкторы могут наследоваться или перегружаться
Нельзя объявить модификатор доступа для деструктора (является неявно защищенным). Деструкторы всегда вызываются только сборщиком мусора, и их нельзя вызывать напрямую из кода
Класс может иметь несколько деструкторов
Нельзя объявить деструктор, который принимает параметры. Сборщик мусора вызывает деструктор, и нет возможности его контролировать, передавая ему параметры
Какие из приведенных ниже утверждений верны в отношении жизненного цикла объекта?
Деструктор имеет тот же модификатор доступа, что и класс
Выделяется блок памяти. Этот блок памяти достаточно большой, чтобы сохранять объект
Блок памяти конвертируется в объект. Объект инициализируется
Объект очищается, например, путем освобождения любых неуправляемых ресурсов, используемых приложением, таких как дескрипторы файлов или подключения к базам данных
Укажите верные утверждения для понятия «виртуальный метод Finalize() в базовом классе .NET System.Object».
Виртуальный метод Finalize() в предлагаемой по умолчанию реализации ничего не делает
Вызов метода Finalize() будет выполняться либо во время естественной активизации процесса сборки мусора, либо во время его принудительной активизации программным образом с помощью GC.Collect()
Метод Finalize() по определению является защищенным (protected), вызывать его напрямую из класса экземпляра с помощью операции точки не допускается
Метод Finalize() (если он поддерживается) будет автоматически вызываться сборщиком мусора перед удалением соответствующего объекта из памяти
Изучите представленный ниже код и выберите верный ответ.
public class Program
{
public static void Main()
{
SortedList<int,string> numberNames = new SortedList<int,string>()
{
{3, "Three"},
{1, "One"},
{2, "Two"},
{5, "Five"},
{4, "Four"},
};
numberNames.Remove(1);
foreach(var kvp in numberNames)
Console.WriteLine("key: {0}, value: {1}", kvp.Key , kvp.Value );
}
}
В консоль будет выведено сообщение:
key: 1, value: One
key: 2, value: Two
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five
Runtime exception: ArgumentOutOfRangeException
В консоль будет выведено сообщение:
key: 2, value: Two
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five
В консоль будет выведено сообщение:
key: 1, value: One
key: 2, value: Two
key: 4, value: Four
key: 5, value: Five
- Практикум по программированию на C# 2
- Лекция 3.1. Работа с файловой системой
- Промежуточный тест 3
Какое из представленных ниже утверждений верно для понятия «метод Delete класса FileInfo»?
Создает StreamWriter, который добавляет текст в файл, представленный экземпляром класса FileInfo
Удаляет указанный файл
Расшифровывает файл, который был зашифрован текущей учетной записью с помощью метода шифрования
Создает StreamWriter, который записывает новый текстовый файл
Изучите код и выберите верные утверждения.
public abstract class Example
{
public static abstract void m1();
public abstract void m2();
}
Статический член 'Example.m1 ()' может быть помечен как переопределенный, виртуальный или абстрактный
Разрешено объявлять абстрактный метод статическим
Возникнет ошибка взаимодействия
Статический член 'Example.m1 ()' не может быть помечен как переопределенный, виртуальный или абстрактный
Укажите верное утверждение для понятия «метод Encrypt класса FileInfo».
Создает StreamWriter, который добавляет текст в файл, представленный экземпляром класса FileInfo
Расшифровывает файл, который был зашифрован текущей учетной записью с помощью метода шифрования
Удаляет указанный файл
Шифрует файл, чтобы его могла расшифровать только учетная запись, использованная для шифрования файла
Ниже представлен пример кода. Что демонстрирует этот пример?
string filePath = "myFile.txt";
string fileContents = "I am writing this text to a file called myFile.txt";
File.WriteAllText(filePath, fileContents);
В примере кода показано, как записать содержимое массива fileBytes в новый файл с именем myFile.txt
В примере кода показано, как записать содержимое строковой переменной fileContents в новый файл с именем myFile.txt
В примере показано, как записать содержимое массива строк fileLines в новый файл с именем myFile.txt
В примере показано, как записать содержимое строковой переменной fileContents в файл myFile.txt
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
Внимательно изучите представленный код и выберите верное утверждение
string filePath = "myFile.txt";
byte[] fileBytes = { 12, 134, 12, 8, 32 };
File.WriteAllBytes(filePath, fileBytes);
В примере кода показано, как записать содержимое массива строк fileLines в новый файл с именем myFile.txt.
В примере кода показано, как записать содержимое строковой переменной fileContents в файл myFile.txt.
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
В примере кода показано, как записать содержимое массива fileBytes в новый файл с именем myFile.txt.
В примере кода показано, как записать содержимое строковой переменной fileContents в новый файл с именем myFile.txt.
Внимательно изучите представленный код и выберите верное утверждение.
string filePath = "myFile.txt";
byte[] data = File.ReadAllBytes(filePath);
В примере показано, как прочитать содержимое файла myFile.txt в массив data
В примере показано, как прочитать содержимое файла myFile.txt и сохранить каждую строку в массиве строк lines
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
В примере показано, как прочитать содержимое файла myFile.txt и сохранить данные в строку data
Сопоставьте описание ключевых методов, предоставляемых классом File, и приведенные примеры кода.
string filePath = "...";
string fileContents = File.ReadAllText(filePath); |
· Позволяет читать весь текст из файла в строковую переменную |
string filePath = "...";
DateTime time = File.GetLastAccessTime(filePath); |
· Позволяет получить время последнего доступа к файлу |
string filePath = "...";
File.SetCreationTime(filePath,DateTime.Now); |
· Позволяет установить время создания файла |
string sourceFile = "...";
string destFile = "...";
File.Move(sourceFile,destFile); |
· Позволяет переместить файл в новое место |
string filePath = "...";
File.SetLastAccessTime(filePath,DateTime.Now); |
· Позволяет установить время последнего доступа к файлу |
string filePath = "...";
string fileContents = "...";
File.WriteAllText(filePath,fileContents); |
· Позволяет создать новый файл, записать текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию |
- Позволяет установить время создания файла
- Позволяет переместить файл в новое место
- Позволяет получить время последнего доступа к файлу
- Позволяет читать весь текст из файла в строковую переменную
- Позволяет создать новый файл, записать текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию
- Позволяет установить время последнего доступа к файлу
Соотнесите ключевые методы, предоставляемые классом File, с их описанием.
Create |
· Позволяет создать новый файл файловой системы Windows |
Copy |
· Позволяет cкопировать существующий файл в новое место |
Exists |
· Позволяет определить, существует ли указанный файл |
GetCreationTime |
· Позволяет получить время создания файла |
Delete |
· Позволяет удалить файл из файловой системы Windows |
AppendAllText |
· Позволяет открыть существующий файл, добавить текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию |
- Позволяет открыть существующий файл, добавить текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию
- Позволяет удалить файл из файловой системы Windows
- Позволяет cкопировать существующий файл в новое место
- Позволяет создать новый файл файловой системы Windows
- Позволяет получить время создания файла
- Позволяет определить, существует ли указанный файл
Изучите представленный ниже код, выберите верное утверждение.
string filePath = "myFile.txt";
string[] fileLines = { "Line 1", "Line 2", "Line 3" };
File.WriteAllLines(filePath, fileLines);
В примере кода показано, как записать содержимое массива строк fileLines в новый файл с именем myFile.txt
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
В примере показано, как записать содержимое массива fileBytes в новый файл с именем myFile.txt
В примере показано, как записать содержимое строковой переменной fileContents в новый файл с именем myFile.txt
В примере кода показано, как записать содержимое строковой переменной fileContents в файл myFile.txt
Сопоставьте ключевые методы, предоставляемые классом File, и их описание.
SetLastAccessTime |
· Позволяет установить время последнего доступа к файлу |
ReadAllText |
· Позволяет читать весь текст из файла в строковую переменную |
WriteAllText |
· Позволяет создать новый файл, записать текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию |
Move |
· Позволяет переместить файл в новое место |
GetLastAccessTime |
· Позволяет получить время последнего доступа к файлу |
SetCreationTime |
· Позволяет установить время создания файла |
- Позволяет установить время создания файла
- Позволяет создать новый файл, записать текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию
- Позволяет переместить файл в новое место
- Позволяет читать весь текст из файла в строковую переменную
- Позволяет установить время последнего доступа к файлу
- Позволяет получить время последнего доступа к файлу
Внимательно изучите код. Укажите верные утверждения.
var fileStream = new FileStream(@"c:\file.txt", FileMode.Open, FileAccess.Read);
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8))
{
string line;
while ((line = streamReader.ReadLine()) != null)
{ // process the line }
}
С помощью статического класса File происходит считывание текстового файла в массив строк
С помощью статического класса File происходит считывание текстового файла в строку
С помощью статического класса File происходит считывание текстового файла построчно
Для выполнения примера необходимо подключить пространство имен using System.IO
Внимательно изучите код и выберите верные утверждения.
using (var fileStream = new FileStream(@"C:\file.txt", FileMode.Open))
{
// ....
}
Выберите один или несколько ответов:
Для выполнения примера необходимо подключить пространство имен using System.IO
Позволяет открыть существующий файл только для записи
Позволяет открыть существующий файл только для чтения
Позволяет открыть существующий файл для чтения и записи
Соотнесите методы класса File с их описаниями.
Replace |
· Заменяет содержимое указанного файла содержимым другого файла, удаляя исходный файл и создавая резервную копию замененного файла |
WriteAllBytes |
· Создает новый файл, записывает в него указанный массив байтов, затем закрывает файл. Если целевой файл уже существует, он перезаписывается |
WriteAllText |
· Создает новый файл, записывает указанную строку в файл, а затем закрывает файл. Если целевой файл уже существует, он перезаписывается |
WriteAllLines |
· Создает новый файл, записывает в него набор строк, а затем закрывает файл |
- Создает новый файл, записывает в него указанный массив байтов, затем закрывает файл. Если целевой файл уже существует, он перезаписывается
- Создает новый файл, записывает в него набор строк, а затем закрывает файл
- Создает новый файл, записывает указанную строку в файл, а затем закрывает файл. Если целевой файл уже существует, он перезаписывается
- Заменяет содержимое указанного файла содержимым другого файла, удаляя исходный файл и создавая резервную копию замененного файла
Внимательно изучите представленный код и выберите верное утверждение
string filePath = "myFile.txt";
string fileContents = "I am writing this text to a file called myFile.txt";
File.AppendAllText(filePath, fileContents);
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
В примере кода показано, как записать содержимое строковой переменной fileContents в новый файл с именем myFile.txt.
В примере кода показано, как записать содержимое строковой переменной fileContents в файл myFile.txt.
В примере кода показано, как записать содержимое массива fileBytes в новый файл с именем myFile.txt.
В примере кода показано, как записать содержимое массива строк fileLines в новый файл с именем myFile.txt.
Внимательно изучите приведенный ниже пример кода и выберите верное утверждение.
string filePath = "myFile.txt";
string[] fileLines = { "Line 1", "Line 2", "Line 3" };
File.AppendAllLines(filePath, fileLines);
В примере кода показано, как записать содержимое строковой переменной fileContents в новый файл с именем myFile.txt.
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
В примере кода показано, как записать содержимое массива fileBytes в новый файл с именем myFile.txt.
В примере кода показано, как записать содержимое массива строк fileLines в новый файл с именем myFile.txt.
В примере кода показано, как записать содержимое строковой переменной fileContents в файл myFile.txt.
Изучите представленный код и укажите верное утверждение.
string filePath = "myFile.txt";
string data = File.ReadAllText(filePath);
В примере показано, как прочитать содержимое файла myFile.txt и сохранить данные в строку
В примере показано, как прочитать содержимое файла myFile.txt и сохранить каждую строку в массиве строк
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
В примере показано, как прочитать содержимое файла myFile.txt в массив
Изучите код, приведенный ниже, и выберите верное утверждение.
FileInfo fi = new FileInfo(@"D:\DummyFile.txt");
FileStream fs = fi.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read );
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Another line from streamwriter");
sw.Close();
Создается счетчик, чтобы проверить, сколько байтов нужно прочитать
Производится запись текста в файл с помощью StreamWriter
Осуществляется чтение файла с помощью StreamReader
Осуществляется чтение файла с использованием класса FileInfo
Установите соответствие между ключевыми методами, предоставляемыми классом Directory, и их описаниями.
GetDirectories |
· Позволяет получить все подкаталоги по указанному пути |
Move |
· Позволяет переместить каталог. Нельзя использовать метод для перемещения каталогов с разных носителей |
Exists |
· Позволяет определить, существует ли каталог по указанному пути |
GetFiles |
· Позволяет получить все файлы по указанному пути |
DeleteDirectory |
· Позволяет удалить один или несколько каталогов файловой системы |
CreateDirectory |
· Позволяет создавать еще не существующие каталоги, указанные в пути |
- Позволяет получить все подкаталоги по указанному пути
- Позволяет создавать еще не существующие каталоги, указанные в пути
- Позволяет получить все файлы по указанному пути
- Позволяет определить, существует ли каталог по указанному пути
- Позволяет удалить один или несколько каталогов файловой системы
- Позволяет переместить каталог. Нельзя использовать метод для перемещения каталогов с разных носителей
Соотнесите описание ключевых методов, предоставляемых классом File, с примерами кода.
string filePath = "...";
File.Delete(filePath); |
· Позволяет удалить файл из файловой системы Windows |
string filePath = "...";
int bufferSize = 128;
FileStream file = File.Create(filePath,bufferSize, FileOptions.None); |
· Позволяет создать новый файл файловой системы Windows |
string filePath = "...";
string fileContents = "...";
File.AppendAllText(filePath,
fileContents); |
· Позволяет открыть существующий файл, добавить текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию |
string filePath = "...";
bool exists = File.Exists(filePath); |
· Позволяет определить, существует ли указанный файл |
string filePath = "...";
DateTime time = File.GetCreationTime(filePath); |
· Позволяет получить время создания файла |
string sourceFile = "...";
string destFile = "...";
bool overwrite = false;
File.Copy(sourceFile,destFile,overwrite); |
· Позволяет cкопировать существующий файл в новое место |
- Позволяет открыть существующий файл, добавить текст в этот файл, а затем закрыть файл, выполнив все действия в одну операцию
- Позволяет удалить файл из файловой системы Windows
- Позволяет cкопировать существующий файл в новое место
- Позволяет получить время создания файла
- Позволяет создать новый файл файловой системы Windows
- Позволяет определить, существует ли указанный файл
Внимательно изучите код и выберите верное утверждение.
string filePath = "myFile.txt";
string[] lines = File.ReadAllLines(filePath);
Выберите один ответ:
В этом примере показано, как прочитать содержимое файла myFile.txt и сохранить данные в строку
В примере показано, как записать содержание массива строк fileLines в файл myFile.txt
В данном примере показано, как прочитать содержимое файла myFile.txt в массив
В примере показано, как прочитать содержимое файла myFile.txt и сохранить каждую строку в массиве строк
- Практикум по программированию на C# 2
- Лекция 4.1. Делегаты и события
- Промежуточный тест 4
Внимательно изучите фрагмент кода, приведенный ниже.
namespace GenericDelegateDemo
{ public class GenericDelegates
{ static void Main(string[] args)
{ Func<int, float, double, double> obj1 = (x, y, z) =>
{ return x + y + z;
};
double Result = obj1.Invoke(100, 125.45f, 456.789);
Console.WriteLine(Result);
Action<int, float, double> obj2 = (x, y, z) =>
{ Console.WriteLine(x + y + z);
};
obj2.Invoke(50, 255.45f, 123.456);
Predicate<string> obj3 = new Predicate<string>(CheckLength);
bool Status = obj3.Invoke("Pranaya");
Console.WriteLine(Status);
Console.ReadKey();
}
public static bool CheckLength(string name)
{ if (name.Length > 5) return true;
return false;
}
}
}
Что будет выведено в консоль?
682,238996948242
428,905996948242
False
682,238996948242
428,905996948242
True
Pranaya
Возникнет ошибка компиляции
682,238996948242
428,905996948242
True
Какие утверждения верны для понятия «анонимные методы»?
Анонимный метод не имеет доступа к ref- и out-параметрам определяющего их метода
Для определения анонимного метода используется ключевое слово delegate, после которого можно дополнительно представить список параметров в круглых скобках
Анонимный метод можно использовать с делегатом, вызывая его через делегат
Анонимным является метод, имеющий имя, тип, список параметров и тело метода
Внимательно изучите код и выберите верные утверждения.
public isValidDelegate isValid = null;
. . .
if(isValid != null)
{ isValid();
}
При вызове метода Invoke используются поля _target и _methodPtr для вызова желаемого метода на заданном объекте, при этом сигнатура метода Invoke не соответствует сигнатуре делегата
При вызове делегата синхронно в случае группового вызова каждый из инкапсулированных в него методов вызывается по порядку
При вызове метода Invoke используются поля _target и _methodPtr для вызова желаемого метода на заданном объекте, при этом сигнатура метода Invoke соответствует сигнатуре делегата
Обнаружив строку вида isValid();, компилятор генерирует код – аналогичный, как если бы он встретил в исходном тексте следующее: isValid.Invoke();
Внимательно изучите фрагмент кода, представленный ниже.
MyEvent += new MyEventDelegate (myHandlingMethod);
...
MyEvent -= myHandlingMethod;
...
if (MyEvent != null)
{ EventArgs args = new EventArgs();
MyEvent(this, args);
}
Чтобы подписаться на событие, используется составная операция присваивания «+=» – точно так же, как при добавлении ссылки на метод делегату
Чтобы отказаться от подписки на событие, используется составная операция присваивания «-=»
Для генерации события используется имя события и указываются параметры в скобках, аналогично вызову метода
При попытке вызвать событие, не имеющее подписчиков, код будет генерировать исключение NullReferenceException
Метод инициализации события следует именовать с префиксом On
Укажите утверждения, которые верны в отношении понятия «событие».
События следует использовать только тогда, когда разрабатывается тип, которому необходимо сообщать многим классам об изменении своего состояния
Тип использует события для свидетельствования о значительном изменении в приложении и организации делегата для вызова обработчика события
Любой объект, имеющий доступ к делегату, может ссылаться на такой делегат, только тип, определяющий событие, может вызвать это событие
Когда тип определяет событие, другие типы могут определить метод, соответствующий сигнатуре делегата, связанного с событием, подписаться на событие и указать, что их метод должен быть запущен при возникновении события
Укажите верные утверждения для понятия «лямбда-выражение».
Лямбда-выражение в C# является развернутой записью анонимной функции
Лямбда-выражения обеспечивают технику реализации анонимных методов, с помощью которой можно достичь более краткого кода, чем с делегатами
Лямбда-выражение состоит из набора параметров и тела. Тело определяет функцию, которая может вернуть значение, в этом случае Visual C#-компилятор выводит возвращаемый тип из определения метода
Лямбда-выражением является выражение, возвращающее метод
Ниже приведен код.
namespace DelegateDemo
{ public delegate void AddDelegate(int a, int b);
public delegate string GreetingsDelegate(string name);
public class Program
{
public void Add(int x, int y)
{ Console.WriteLine(@"The Sum of {0} and {1}, is {2} ", x, y, (x + y));
}
public static string Greetings(string name)
{ return "Hello @" + name;
}
static void Main(string[] args)
{ Program obj = new Program();
AddDelegate ad = new AddDelegate(obj.Add);
GreetingsDelegate gd = new GreetingsDelegate(Program.Greetings);
ad(100, 50);
string GreetingsMessage = gd("Pranaya");
Console.WriteLine(GreetingsMessage);
Console.ReadKey();
}
}
}
Что будет выведено в консоль?
Hello @
The Sum of 100 and 50, is 150
The Sum of 100 and 50, is 150
Hello @Pranaya
Pranaya
Hello @Pranaya
Выберите верные утверждения для понятия «делегат».
Когда делегат не ссылается на какие-либо методы, он будет обращаться в null; когда делегат имеет ссылки на один или несколько методов, он не равен null
После определения делегата и создания его экземпляра делегат можно вызвать в коде
Делегат можно вызвать аналогично методу, используя имя экземпляра делегата со следующими за ним в скобках параметрами
Делегат должен ссылаться на методы и поэтому не может быть равен null
Укажите утверждения, являющиеся верными применительно к понятию « анонимные методы».
Анонимный метод может объявлять локальные переменные с теми же именами, что и у членов объемлющего класса (локальные переменные имеют отдельный контекст и скрывают внешние переменные-члены)
Анонимный метод может обращаться к переменным экземпляра (или статическим переменным) из контекста объемлющего класса
Анонимный метод не имеет доступа к ref- и out-параметрам определяющего их метода
Анонимный метод может иметь локальные переменные, имена которых совпадают с именами локальных переменных объемлющего метода
Внимательно изучите фрагмент кода. Выберите верные утверждения.
class Math
{
public int Sum(int x, int y) { return x + y; }
}
class Program
{ delegate int Operation(int x, int y);
static void Main(string[] args)
{ Math math = new Math();
Operation del = math.Sum;
int result = del(4, 5);
Console.WriteLine(result);
}
}
В консоль будет выведено сообщение:
9
Делегат Operation возвращает значение типа int и имеет два параметра типа int
В консоль будет выведено сообщение:
5
Делегату Operation соответствует любой метод, который возвращает значение типа int и принимает два параметра типа int
Изучите фрагмент кода и укажите верные утверждения.
public delegate void MyEventDelegate(object sender, EventArgs e);
...
public event MyEventDelegate MyEvent = null;
При определении события следует помнить, что делегат должен быть по крайней мере уровня доступа события, в противном случае использующие тип классы не будут в состоянии создать экземпляры делегата и, следовательно, не смогут подписаться на событие
Делегат – это тип, следовательно, он может существовать на уровне пространства имен или класса. Событие же – это член класса и может определяться только на уровне класса
При определении события, как правило, достаточно иметь уровень доступа private
Событие уровня класса может использовать делегат любого уровня, включая делегаты, существующие в других сборках
Для определения события используется ключевое слово event и указывается делегат
Изучите код и укажите верные утверждения.
DelegateIntro di;
. . .
Feedback fb1 = new Feedback(FeedbackToConsole);
Feedback fb2 = new Feedback(FeedbackToMsgBox);
Feedback fb3 = new Feedback(di.FeedbackToFile);
...
Counter(1, 2, fbChain);
. . .
private static void Counter(int from, int to, Feedback fb)
{
for (int val = from; val <= to; val++)
{
// If any callbacks are specified, call them
if (fb != null)
fb(val);
}
}
. . .
Внутри Counter содержится код, неявно вызывающий метод Invoke по отношению к объекту-делегату Feedback
Методы вызываются в следующей последовательности: FeedbackToFile, FeedbackToConsole, FeedbackToMsgBox
Когда метод Invoke вызывается по отношению к делегату, на который ссылается fbCbain, делегат обнаруживает, что поле _invocationList не равно null, и инициируется выполнение цикла, итерационно обрабатывающего все элементы массива путем вызова метода, оболочкой которого служит указанный делегат
Методы вызываются в следующей последовательности: FeedbackToConsole, FeedbackToMsgBox и FeedbackToFile
Внимательно изучите фрагмент кода и выберите верные утверждения.
MyDelegate del = null;
...
void myMethod()
{
int count = 0;
del += new MyDelegate(() =>
{
count++;
// Perform operation using count variable.
...
});
}
Лямбда-выражение, которое присваивается делегату в методе, может использовать переменные, определенные в этом методе
Когда все ссылки на делегат del удалятся, сборщик мусора отметит переменную count для удаления
Если какая-либо ссылка на делегат del останется существовать, когда метод завершится, переменная count останется
Лямбда-выражение может использовать любой объект любого типа, находящийся в области видимости, когда выражение определено
Внимательно изучите фрагмент кода, выберите верное утверждение.
class Program
{
delegate bool IsEqual(int x);
static void Main(string[] args)
{
int[] integers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int result1 = Sum(integers, x => x > 5);
Console.WriteLine(result1);
Console.Read();
}
private static int Sum (int[] numbers, IsEqual func)
{
int result = 0;
foreach(int i in numbers)
{
if (func(i))
result += i;
}
return result;
}
}
В консоль будет выведено сообщение:
30
Возникнет ошибка времени выполнения
Возникнет ошибка компиляции
В консоль будет выведено сообщение:
6, 7, 8, 9
Внимательно изучите представленный ниже фрагмент кода.
namespace LambdaExpressionDemo
{
public class LambdaExpression
{public delegate string GreetingsDelegate(string name);
static void Main(string[] args)
{ GreetingsDelegate obj = delegate (string name)
{return "Hello @" + name + " welcome to Dotnet Tutorials";
};
string GreetingsMessage = obj.Invoke("Pranaya");
Console.WriteLine(GreetingsMessage);
Console.ReadKey();
}
}
}
Что будет выведено в консоль?
Pranaya
Возникнет ошибка компиляции
Hello @" + name + " welcome to Dotnet Tutorials
Hello @Pranaya welcome to Dotnet Tutorials
Изучите представленный ниже код и укажите верное утверждение.
class Program
{
delegate int Operation(int x, int y);
static void Main(string[] args)
{ Operation op = Subtract;
op += Multiply;
op += Add;
Console.WriteLine(op(7, 2));
Console.Read();
}
private static int Add(int x, int y) { return x + y; }
private static int Subtract(int x, int y) { return x - y; }
private static int Multiply(int x, int y) { return x * y; }
}
В консоль будет выведено сообщение:
9
5
14
В консоль будет выведено сообщение:
9
В консоль будет выведено сообщение:
5
Возникнет ошибка компиляции
В консоль будет выведено сообщение:
14
Выберите верные утверждения для понятия « определение события».
Если событие не требует передачи аргументов события при его вызове, можно использовать класс EventArgs напрямую
События основаны на делегатах, поэтому прежде чем определять событие, следует определить делегат, описывающий метод обработки события
Первому параметру необходимо иметь тип object и имя sender. Второй параметр должен быть производным от класса EventArgs пространства имен System с именем e
Согласно стандартному соглашению делегат события не должен возвращать значение и должен принимать два параметра
Внимательно изучите фрагмент кода.
namespace LambdaExpressionDemo
{
public class LambdaExpression
{ public delegate string GreetingsDelegate(string name);
static void Main(string[] args)
{ GreetingsDelegate obj = new GreetingsDelegate(LambdaExpression.Greetings);
string GreetingsMessage = obj.Invoke("Pranaya");
Console.WriteLine(GreetingsMessage);
Console.ReadKey();
}
public static string Greetings(string name)
{
return "Hello @" + name + " welcome to Dotnet Tutorials";
}
}
}
Что будет выведено в консоль?
Hello @Pranaya welcome to Dotnet Tutorials
Возникнет ошибка компиляции
Pranaya
Hello @" + name + " welcome to Dotnet Tutorials
- Практикум по программированию на C# 2
- Лекция 5.1. Коллекции, создание и использование обобщенных типов
- Промежуточный тест 5
Ниже представлен код. Что будет выведено в консоль?
class Program
{
static void Main(string[] args)
{
Dictionary<char, Person> people = new Dictionary<char, Person>();
people.Add('b', new Person() { Name = "Bill" });
people.Add('t', new Person() { Name = "Tom" });
people.Add('j', new Person() { Name = "John" });
foreach (KeyValuePair<char, Person> keyValue in people) Console.WriteLine(keyValue.Key);
foreach (char c in people.Keys) Console.WriteLine(c);
foreach (Person p in people.Values) Console.WriteLine(p.Name);
}
}
class Person
{
public string Name { get; set; }
}
Выберите один ответ:
j - John
t - Tom
b - Bill
b - Bill
t - Tom
j - John
Bill
Tom
John
b
t
j
Выберите верное утверждение для понятия «метод AddAfter(LinkedListNode<T> node, LinkedListNode<T> newNode) класса LinkedList<T>».
Вставляет в список новый узел со значением value перед узлом node
Вставляет узел newNode в список после узла node
Вставляет в список узел newNode перед узлом node
Вставляет в список новый узел со значением value после узла node
Какие утверждения справедливы применительно к понятию «обобщенный метод»?
Для определения обобщенного метода используется параметр типа или несколько параметров, заключенных в угловые скобки, определенных перед списком параметров
Обобщенные методы и делегаты содержат параметр типа, который можно использовать в списке параметров и возвращаемом типе для метода или делегата
Обобщенные методы не позволяют определить методы, выполняющие действия над объектом
Обобщенные методы позволяют определить методы, выполняющие действия над объектом при сохранении безопасности типов
Внимательно изучите представленный ниже код и укажите верные утверждения.
class PrintableCollection<TItem>
{
TItem[] data;
int index;
TItem tempData;
...
public PrintableCollection()
{
this.tempData = default(TItem);
...
}
...
}
Для структуры ключевое слово default будет инициализировать каждый член структуры нулем или null в зависимости от того, являются они значимым типом или ссылкой
Ключевое слово default порождает значимые значения по умолчанию для типа, указанного в качестве параметра типа
Когда компилятор генерирует код для обобщенного типа, он заменяет конструкцию default значением по умолчанию, зависящим от конкретного типа
Значение для ссылочных и значимых типов по умолчанию будет null
Выберите верные утверждения применительно к понятию «контрвариантность».
Если можно выполнять операции с использованием объекта, значит, можно выполнять ту же операцию с использованием строки, так как все строки являются объектами
Контравариантность является следствием ковариантности и позволяет использовать обобщающий интерфейс для ссылки на объект типа B через ссылку на тип A, пока типа B является производным от типа A
Если методы в обобщенном интерфейсе могут возвращать строки, они также могут возвращать объекты
Если методы в обобщенном интерфейсе могут принимать параметры object, они могут принимать параметры string
Какие утверждения верны применительно к понятию «делегат Action»?
Делегат Action имеет перегрузки для поддержки от 0 и до 16 параметров
Делегат Action – это делегат, используемый для инкапсуляции методов, не возвращающих значения (возвращаемым типом является void)
При использовании делегата Action всегда указывается тип возвращаемого значения в дополнение к типам параметров, последний параметр типа – всегда тип возвращаемого значения
.NET Framework включает несколько перегруженных делегатов Action, которые позволяют указать типы параметров, передаваемых делегату
Внимательно изучите приведенный ниже код, выберите верные утверждения.
interface IWrapper<T>
{ void SetData(T data);
T GetData(); }
class Wrapper<T> : IWrapper<T>
{ private T storedData;
void IWrapper<T>.SetData(T data)
{ this.storedData = data; }
T IWrapper<T>.GetData()
{ return this.storedData; }
}
...
Wrapper<string> stringWrapper = new Wrapper<string>();
IWrapper<string> storedStringWrapper = stringWrapper;
storedStringWrapper.SetData("Hello");
Console.WriteLine("Stored value is {0}", storedStringWrapper.GetData());
Код генерирует сообщение «Stored value is Hello»
В коде создается экземпляр типа Wrapper<string>, который для вызова метода SetData ссылается на объект через интерфейс IWrapper<string>
Обобщенный класс Wrapper<T> является оберткой вокруг типа T
Обобщенный интерфейс IWrapper определяет методы SetData и GetData, которые класс Wrapper<T> реализует для хранения и извлечения данных соответственно
Тип Wrapper<T> реализует интерфейс неявно
Внимательно изучите код и выберите верный ответ.
public static void Main()
{ ArrayList arlist = new ArrayList()
{ 1,
"Bill",
300,
4.5f
};
arlist.Insert(1, "Item");
foreach (var val in arlist) Console.WriteLine(val);
}
Будет вызвано Runtime exception
В консоль будет выведено сообщение:
1
Bill
300
4.5
Item
В консоль будет выведено сообщение:
Item
1
Bill
300
4.5
В консоль будет выведено сообщение:
1
Item
Bill
300
4.5
Выберите верное утверждение, относящееся к понятию «ковариации».
Если можно выполнять операции с использованием объекта, значит, можно выполнять ту же операцию с использованием строки, поскольку все строки являются объектами
Если методы в обобщенном интерфейсе могут принимать параметры object, они могут принимать параметры string
Контравариантность является следствием ковариантности и позволяет использовать обобщающий интерфейс для ссылки на объект типа B через ссылку на тип A, пока типа B является производным от типа A
Если методы в обобщенном интерфейсе могут возвращать строки, они также могут возвращать объекты
Изучите код. Выберите верные утверждения.
interface IStoreWrapper<T>
{ void SetData(T data);
}
interface IRetrieveWrapper<T>
{ T GetData();
}
class Wrapper<T> : IStoreWrapper<T>, IRetrieveWrapper<T>
{ private T storedData;
void IStoreWrapper<T>.SetData(T data)
{ this.storedData = data;
}
T IRetrieveWrapper<T>.GetData()
{ return this.storedData;
}
}
Доступ к методам SetData и GetData осуществляется с помощью различных интерфейсов
Интерфейсы IStoreWrapper<T> и IRetrieveWrapper<T> реализуются в классе Wrapper<T>
Код генерирует сообщение «Stored value is Hello»
Интерфейс IRetrieveWrapper<T> позволяет только читать данные, которые хранятся в объекте IWrapper<T>, с помощью метода GetData, и он не предоставляет какого-либо способа изменения данных
Ниже приведен код. Что будет выведено в консоль?
class Program
{
static void Main(string[] args)
{Queue<Person> persons = new Queue<Person>();
persons.Enqueue(new Person() { Name = "Tom" });
persons.Enqueue(new Person() { Name = "Bill" });
persons.Enqueue(new Person() { Name = "John" });
Person pp = persons.Peek();
Console.WriteLine(pp.Name);
}
}
class Person
{
public string Name { get; set; }
}
Bill
Tom
John
Возникнет ошибка
Внимательно изучите код, укажите верные утверждения.
T PerformUpdate<T>(T input)
{ T output = // Update parameter.
return output;
}
...// Generic method usage....
string result = PerformUpdate<string>("Test");
int result2 = PerformUpdate<int>(1);
...
string PerformUpdate(string input)
{ string output = // Update parameter.
return output;
}
int PerformUpdate(int input)
{ int output = // Update parameter.
return output;
}
При компиляции приложения порождаются эквиваленты указанных методов в Microsoft Intermediate Language
Пример показывает, как компилятор преобразует обобщенный метод в неуниверсальный метод
В примере показано, как вызывать обобщенный метод, указав параметр типа
Компилятор преобразует обобщенные методы «вызов к вызову» (calls to calls) в конкретные методы
Внимательно изучите код и выберите верные утверждения.
class PrintableCollection<TItem>
{
TItem[] data;
int index;
...
public void Insert(TItem item)
{
...
data[index] = item;
...
}
}
Класс PrintableCollection определяет метод Insert, принимающий параметр типа TItem
Класс Insert определяет метод PrintableCollection, принимающий параметр типа TItem
В примере показан пользовательский обобщенный тип PrintableCollection, использующий параметр типа TItem
В примере создается массив объектов TItem, а метод Insert вставляет в массив значение, определяемое его индексом в этом массиве
Соотнесите название метода класса ArrayList с его описанием.
void Remove(object value) |
· Удаляет из списка объект value |
void InsertRange(int index, ICollection col) |
· Вставляет в список, начиная с индекса index, коллекцию ICollection |
void Insert(int index, object value) |
· Вставляет в список по индексу index объект value |
void RemoveRange(int index, int count) |
· Удаляет из списка count элементов, начиная с индекса index |
void RemoveAt(int index) |
· Удаляет из списка элемент по индексу index |
- Удаляет из списка count элементов, начиная с индекса index
- Удаляет из списка объект value
- Удаляет из списка элемент по индексу index
- Вставляет в список, начиная с индекса index, коллекцию ICollection
- Вставляет в список по индексу index объект value
Внимательно изучите код, представленный ниже, и укажите верные утверждения.
interface IPrinter<DocumentType> where DocumentType : IPrintable
{
void PrintDocument(DocumentType Document);
PrintPreview PreviewDocument(DocumentType Document);
}
class Printer<DocumentType> : IPrintable<DocumentType> where DocumentType : IPrintable
{
public void PrintDocument(DocumentType Document)
{ IPrintable doc = (IPrintable)Document;
PrintService.Print(doc);
}
public PrintPreview PreviewDocument(DocumentType Document)
{ IPrintable doc = (IPrintable)Document;
return new PrintPreview(doc)
}
}
В обобщенном классе можно реализовать обобщенный интерфейс и использовать его для ссылки на класс, как и при работе с обычным классом и интерфейсом
Как и обобщенные классы и структуры, обобщенные интерфейсы могут определить ограничения на параметры типа
Обобщенный интерфейс похож на любой другой интерфейс, за исключением того, что при его определении указываются параметры типа, которые используются в членах, определенных в интерфейсе
В примере показан обобщенный интерфейс, который реализуется в обобщенном классе
Изучите код, приведенный ниже. Выберите верные утверждения.
class PrintableCollection<TItem> where TItem : IPrintable
{
TItem[] data;
...
public void PrintItems()
{
foreach (TItem item in data)
{
item.Print();
}
}
}
Ключевое слово where можно добавить для каждого параметра типа, который определяется. Более того, можно использовать несколько ограничений для каждого типа параметра
В данном примере указано, что параметр типа для типа PrintableCollection должен реализовывать интерфейс IPrintable
Для добавления уточнения после определения класса используется ключевое слово then
Несколько ограничений определяют, разделяя их уточнения запятой, как класс, реализующий несколько интерфейсов
Укажите верные утверждения, относящиеся к понятию «обобщенный делегат».
При использовании делегата Func всегда указывается тип возвращаемого значения в дополнение к типам параметров, последний параметр типа – всегда тип возвращаемого значения
Обобщенный делегат определяется с помощью параметров типа аналогично использованию параметров типа в объявлении метода
Делегат Action – это делегат, используемый для инкапсуляции методов, не возвращающих значения (возвращаемым типом является void)
Основными обобщенными делегатами являются Action и Func
Делегат Func не возвращает значение
Выберите верные утверждение, относящиеся к понятию «Делегат Func».
Для результирующего выходного типа делегат Func использует ковариантность
При использовании делегата Func всегда указывается тип возвращаемого значения в дополнение к типам параметров, последний параметр типа – всегда тип возвращаемого значения
Делегат Func имеет перегрузки для поддержки от 0 и до 16 параметров
Делегат Func – это делегат, используемый для инкапсуляции методов, не возвращающих значения (возвращаемым типом является void)
- Практикум по программированию на C# 2
- Лекция 5.2. Использование обобщенных методов и делегатов. Реализация пользовательского класса коллекции.
- Промежуточный тест 6
Внимательно изучите код и выберите верные утверждения.
var listA = new List<int>() { 8, 3, 2 };
var listB = listA;
bool result = listA.Equals(listB);
Возвращает false, поскольку указанные два списка не являются одним и тем же экземпляром
Возникнет ошибка времени компиляции
Возвращает true, поскольку два указанных списка равны по ссылкам (являются одним и тем же экземпляром)
Возникнет ошибка времени выполнения
Приведен список: 8 3 6 2 4 5
Изучите код и выберите верные утверждения.
list.Sort(index: 2, count: 3, comparer: new MyComparer());
Выберите один или несколько ответов:
Сортирует указанный диапазон списка с помощью настраиваемого компаратора
Сортирует список с помощью настраиваемого компаратора
Вернет список: 8 3 2 4 6 5
Вернет список: 2 3 4 5 6 8
Дан список: 8 3 2 6 8
Изучите код и выберите верные утверждения.
int index = list.IndexOf(item: 8, index: 1);
Вернет индекс первого вхождения элемента в списке. Ищет список от указанного индекса до конца списка
Вернет индекс: 0
Вернет отсчитываемый от нуля индекс первого вхождения элемента в списке
Вернет индекс: 4
Сопоставьте описание и пример кода для методов строго типизированного списка List<T>.
Вставляет элемент в список по указанному индексу |
· list.Insert(index: 1, item: 5); |
Возвращает список с диапазоном элементов исходного списка |
· var listB = listA.GetRange( index: 1, count: 3); |
Выполняет указанное действие для каждого элемента в списке. Он делает то же самое, что и стандартный оператор foreach C# |
· list.ForEach(x => { Console.Write(x); }); |
Вставляет элементы другого списка (или объекта, реализующего IEnumerable) в список по указанному индексу |
· listA.InsertRange(index: 1, collection: listB); |
- InsertRange(index: 1, collection: listB);
- Insert(index: 1, item: 5);
- ForEach(x => { Console.Write(x); });
- var listB = listA.GetRange( index: 1, count: 3);
Представлен список: 8 3 2 6 8
Изучите код, укажите верные утверждения.
int index = list.IndexOf(item: 3, index: 1, count: 2);
Выберите один или несколько ответов:
Вернет -1, если элемент не будет найден в указанном диапазоне
Вернет индекс: 1
Вернет индекс: -1
Вернет индекс первого вхождения элемента в списке. Ищет список в диапазоне, указанном индексом и счетчиком
Приведен список: 8 3 2 6 8
Внимательно изучите код и выберите верные утверждения.
int index = list.IndexOf(8);
Вернет индекс первого вхождения элемента в списке. Ищет список от указанного индекса до конца списка
Вернет индекс: 4
Вернет индекс: 0
Вернет отсчитываемый от нуля индекс первого вхождения элемента в списке
Внимательно изучите код, представленный ниже. Выберите верный ответ.
public class Program
{
public static void Main()
{
var arlist = new ArrayList()
{
1,
"Summer",
300,
4.5f
};
string Element = (string) arlist[1];
Console.WriteLine(Element);
}
}
Возникнет ошибка времени компиляции
В консоль будет выведено сообщение:
1
В консоль будет выведено сообщение:
Summer
Возникнет ошибка времени выполнения
Изучите код и выберите верные утверждения.
var listA = new List<int>() { 8, 3, 2 };
var listB = new List<int>() { 8, 3, 2 };
bool result = listA.Equals(listB);
Возвращает true, поскольку два указанных списка равны по ссылкам (являются одним и тем же экземпляром)
Возникнет ошибка времени выполнения
Возникнет ошибка времени компиляции
Возвращает false, поскольку указанные два списка не являются одним и тем же экземпляром
Приведен следующий список: 8 3 2 6
Изучите код и выберите верные утверждения.
list.Sort();
Вернет список: 8 6 3 2
Метод List <T> работает, только если тип T реализует интерфейс IComparable <T> или IComparable
Сортирует все элементы в списке
Вернет индекс первого вхождения элемента в списке. Ищет список в диапазоне, указанном индексом и счетчиком
Вернет список: 2 3 6 8
Соотнесите описание с примером кода для методов строго типизированного списка List<T>.
Возвращает индекс последнего элемента, который соответствует указанному предикату. Он ищет в списке от начала до указанного startIndex |
· int index = list.FindLastIndex( startIndex: 2, match: x => x < 5); |
Возвращает отсчитываемый от нуля индекс последнего элемента, который соответствует указанному предикату |
· int index = list.FindLastIndex(x => x < 5); |
Возвращает индекс последнего элемента, который соответствует указанному предикату в диапазоне, заданном параметром count, и конечный индекс, неожиданно названный startIndex |
· int index = list.FindLastIndex( startIndex: 2, count: 2, match: x => x < 5); |
Возвращает последнее вхождение элемента, соответствующего указанному предикату |
· int item = list.FindLast(x => x < 5); |
- int index = list.FindLastIndex( startIndex: 2, count: 2, match: x => x < 5);
- int item = list.FindLast(x => x < 5);
- int index = list.FindLastIndex(x => x < 5);
- int index = list.FindLastIndex( startIndex: 2, match: x => x < 5);
Установите соответствие между описанием и примером кода для методов строго типизированного списка List<T>.
Добавляет элемент в конец списка |
· list.Add(5); |
Добавляет элементы из другого списка (или коллекции IEnumerable) в конец списка |
· listA.AddRange(listB); |
Возвращает true, если список содержит указанный элемент, или false, если список не содержит указанного элемента |
· bool result = list.Contains(3); |
Преобразует элементы с помощью указанного делегата |
· var conv = new Converter<int, decimal>(x => (decimal)(x+1));
var listB = listA.ConvertAll<decimal>(conv); |
Удаляет все элементы из списка. Счетчик равен нулю, емкость не изменилась |
· list.Clear(); |
- Clear();
- var conv = new Converter<int, decimal>(x => (decimal)(x+1));
var listB = listA.ConvertAll<decimal>(conv);
- AddRange(listB);
- bool result = list.Contains(3);
- Add(5);
Сопоставьте описание и пример кода для конструктора строго типизированного списка List<T>.
Создает список и инициализирует его некоторыми элементами (целыми значениями) |
· var list = new List<int>() { 8, 3, 2 }; |
Создает список и инициализирует его элементами другого списка (или массива, или чего-либо другого, что реализует интерфейс IEnumerable) |
· var listA = new List<int>() { 8, 3, 2 };
var listB = new List<int>(listA); |
Создает пустой список целых значений |
· var list = new List<int>(); |
Создает список с указанной емкостью |
· var list = new List<int>(16); |
- var listA = new List<int>() { 8, 3, 2 };
var listB = new List<int>(listA);
- var list = new List<int>() { 8, 3, 2 };
- var list = new List<int>();
- var list = new List<int>(16);
Дан список: 8 3 2 6
Внимательно изучите код, укажите верные утверждения.
list.Sort((x, y) => x.CompareTo(y));
Вернет список: 2 3 6 8
Вернет индекс первого вхождения элемента в списке. Он ищет список в диапазоне, указанном индексом и счетчиком
Сортирует список с использованием делегата сравнения
Вернет список: 8 6 3 2
Изучите приведенный ниже код и укажите верный ответ.
public class Program
{
public static void Main()
{
SortedList<string,string> cities = new SortedList<string,string>()
{ {"London", "UK"},
{"New York", "USA"}
} ;
cities.Add("Mumbai", "India");
cities.Add("Johannesburg", "South Africa");
foreach(var kvp in cities) Console.WriteLine("key: {0}, value: {1}", kvp.Key , kvp.Value );
}
}
В консоль будет выведено следующее сообщение:
value: UK
value: USA
В консоль будет выведено сообщение:
key: London, value: UK
key: New York, value: USA
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five
key: 6, value: Six
В консоль будет выведено сообщение:
key: Johannesburg
key: London
key: Mumbai
key: New York
В консоль будет выведено сообщение:
key: Johannesburg, value: South Africa
key: London, value: UK
key: Mumbai, value: India
key: New York, value: USA
Сопоставьте описание и пример кода для методов строго типизированного списка List<T>.
Копирует диапазон элементов списка в массив, начиная с указанного индекса массива |
· list.CopyTo(index: 1, array: array, arrayIndex: 3, count: 1); |
Возвращает true, если список содержит элементы, соответствующие указанному предикату, или false, если список не содержит элементов, соответствующих указанному предикату |
· bool result = list.Exists(x => x == 3); |
Копирует все элементы списка в начало указанного массива |
· list.CopyTo(array); |
Копирует все элементы списка в массив, начиная с указанного индекса массива |
· list.CopyTo(array, arrayIndex: 2); |
- CopyTo(index: 1, array: array, arrayIndex: 3, count: 1);
- CopyTo(array);
- CopyTo(array, arrayIndex: 2);
- bool result = list.Exists(x => x == 3);
Внимательно изучите код. Укажите верный ответ.
public class Program
{
public static void Main()
{
var students = new List<Student>() {
new Student(){ Id = 1, Name="Bill" },
new Student(){ Id = 2, Name="Steve" },
new Student(){ Id = 3, Name="Ram" },
new Student(){ Id = 4, Name="Abdul" },
new Student(){ Id = 5, Name="Bill" }
};
var studNames = from s in students
where s.Name == "Bill"
select s;
foreach(var student in studNames) Console.WriteLine(student.Id + ", " +student.Name);
}
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
В консоль будет выведено следующее сообщение:
Bill
Bill
Нет верного ответа
В консоль будет выведено сообщение:
1, Bill
2, Steve
3, Ram
4, Abdul
5, Bill
В консоль будет выведено следующее сообщение:
1, Bill
5, Bill
В консоль будет выведено сообщение:
1
5
Соотнесите описание с примером кода для методов строго типизированного списка List<T>.
Возвращает индекс первого элемента, который соответствует указанному предикату. Он ищет список в диапазоне, указанном startIndex и count |
· int index = list.FindIndex( startIndex: 2, count: 2, match: x => x < 5); |
Возвращает первое вхождение элемента, соответствующего указанному предикату |
· int item = list.Find(x => x > 2); |
Возвращает индекс первого элемента, который соответствует указанному предикату. Он ищет список от startIndex до конца списка |
· int index = list.FindIndex( startIndex: 2, match: x => x < 5); |
Возвращает отсчитываемый от нуля индекс первого элемента, который соответствует указанному предикату |
· int index = list.FindIndex(x => x < 5); |
Возвращает список с элементами, соответствующими указанному предикату |
· var listB = listA.FindAll(x => x > 2); |
- var listB = listA.FindAll(x => x > 2);
- int index = list.FindIndex( startIndex: 2, count: 2, match: x => x < 5);
- int index = list.FindIndex(x => x < 5);
- int index = list.FindIndex( startIndex: 2, match: x => x < 5);
- int item = list.Find(x => x > 2);
Дан список: 8 3 2 6 8
Внимательно изучите представленный ниже код и выберите верные утверждения.
int index = list.IndexOf(item: 8, index: 1, count: 2);
Выберите один или несколько ответов:
Вернет индекс первого вхождения элемента в списке. Ищет список в диапазоне, указанном индексом и счетчиком
Вернет индекс: 1
Вернет индекс: -1
Вернет -1, если элемент не будет найден в указанном диапазоне
- Практикум по программированию на C# 2
- Лекция 6.1. Использование методов расширения и выражений запросов LINQ
- Промежуточный тест 7
2 попытки
Внимательно изучите код. Что он иллюстрирует?
var customersGroupedByAge = customers.GroupBy(cust => cust.Age);
var customersGroupedByAge = from cust in customers group cust by cust.Age;
Данный пример кода иллюстрирует метод расширения Join и соответствующее выражение запроса join
Пример иллюстрирует метод расширения OrderBy и соответствующее выражение запроса orderby
Пример иллюстрирует метод расширения Where и соответствующее выражение запроса where
Примеры кода иллюстрирует метод расширения GroupBy и соответствующее выражение запроса groupby
Внимательно изучите код. Укажите верное утверждение.
int result = numbers.Sum();
Выберите один ответ:
Пример иллюстрирует метод расширения GroupBy и соответствующее выражение запроса groupby
Данный пример кода иллюстрирует метод расширения Join и соответствующее выражение запроса join
Пример кода иллюстрирует метод расширения OrderBy и соответствующее выражение запроса orderby
Нет верного утверждения
Представлен числовой ряд: 8 2 6 3
Внимательно изучите код и выберите верные утверждения.
int result = numbers.Sum();
Вернет максимальное значение в числовой коллекции
Вернет результат 0
Вернет результат 19
Вернет сумму значений в числовой коллекции
Вернет ноль для пустой коллекции
Изучите код и выберите верный ответ.
var sortedCustomers = customers.OrderBy(cust => cust.FirstName);
var sortedCustomers = from cust in customers orderby cust.FirstName select cust;
Выберите один ответ:
Примеры иллюстрируют метод расширения GroupBy и соответствующее выражение запроса groupby
Примеры иллюстрируют метод расширения Where и соответствующее выражение запроса where
Данные примеры кода иллюстрируют метод расширения Join и соответствующее выражение запроса join
Приведенные примеры иллюстрируют метод расширения OrderBy и соответствующее выражение запроса orderby
Внимательно изучите код и укажите верный ответ.
var customersOver25 = customers.Where(cust => cust.Age > 25);
var customersOver25 = from cust in customers where cust.Age > 25 select cust;
Выберите один ответ:
Данные примеры иллюстрируют метод расширения GroupBy и соответствующее выражение запроса groupby
Эти примеры кода иллюстрируют метод расширения Join и соответствующее выражение запроса join
Примеры иллюстрируют метод расширения OrderBy и соответствующее выражение запроса orderby
Примеры иллюстрируют метод расширения Where и соответствующее выражение запроса where
Укажите правила, которым подчиняются выражения запроса.
Выражения запросов LINQ обеспечивают простой стенографический синтаксис, напоминающий операторы SQL, и предоставляют ту же функциональность, что и эквивалентные им методы расширения
Выражение запроса может содержать ноль или более конструкции from, let или where. Конструкция let представляет переменную и присваивает ей значение. Конструкция where фильтрует элементы коллекции
Выражение запроса может включать ноль или более конструкций orderby с полями сортировки и необязательным указанием на направление упорядочивания. Направление может быть ascending или descending
Выражение запроса должно начинаться с конструкции from, которая указывает на обрабатываемую коллекцию
Внимательно изучите код и выберите верный ответ.
var customersGroupedByAgeRange = customers.GroupBy(cust =>
{ if (cust.Age < 20) return "age < 20";
if (cust.Age >= 20 && cust.Age < 40) return "age >= 20 and < 40";
if (cust.Age >= 40 && cust.Age < 60) return "age >= 40 and < 60";
if (cust.Age >= 60) return "age >= 60";
return "Error";
});
foreach (var cust in customersGroupedByAgeRange.OrderBy(cust => cust.Key))
{ Console.WriteLine("{0}\t\t{1}", cust.Key, cust.Count());
}
Выберите один ответ:
Код генерирует следующий результат:
age > 20 and >= 40 4
age > 40 and >= 60 2
age > 60 1
Код генерирует следующий результат:
age > 20 and < 40 4
age > 40 and < 60 2
age > 60 1
Код генерирует следующий результат:
age >= 20 and < 40 4
age >= 40 and < 60 2
age >= 60 1
Код генерирует следующий результат:
age > 20 and <= 40 4
age > 40 and <= 60 2
age > 60 1
Дан следующий числовой ряд: 8 2 6 3
Внимательно изучите код и укажите верные утверждения.
int result = numbers.Max();
Вернет результат 8
Вернет максимальное значение в числовой коллекции
Выдаст InvalidOperationException для пустой коллекции
Вернет ноль для пустой коллекции
Изучите нижеприведенный код.
public static void Main()
{
int x = 5, y = 10, z = 15;
int result = x * 3 > y ? x : y > z? y : z;
Console.WriteLine(result);
}
Что будет выведено в консоль?
0,5
0
5
Возникнет ошибка времени выполнения Runtime exception
Даны следующие значения коллекции: А Б В Г
Внимательно изучите код и выберите верные утверждения.
int result = items.Count();
Вернет результат 4
Выдаст InvalidOperationException для пустой коллекции
Вернет количество элементов в коллекции
Вернет ноль для пустой коллекции
Соотнесите синтаксис методов расширения Where, OrderBy, GroupBy и Join и эквивалентные выражения запроса с их описанием.
Данные примеры иллюстрируют метод расширения GroupBy и соответствующее выражение запроса groupby |
· var customersGroupedByAge = customers.GroupBy(cust => cust.Age);
var customersGroupedByAge = from cust in customers group cust by cust.Age; |
Примеры иллюстрируют метод расширения OrderBy и соответствующее выражение запроса orderby |
· var sortedCustomers = customers.OrderBy(cust => cust.FirstName);
var sortedCustomers = from cust in customers orderby cust.FirstName select cust; |
Иллюстрируют метод расширения Where и соответствующее выражение запроса where |
· var customersOver25 = customers.Where(cust => cust.Age > 25);
var customersOver25 = from cust in customers where cust.Age > 25 select cust; |
Примеры кода иллюстрируют метод расширения Join и соответствующее выражение запроса join |
· var customersAndCountries = customers.Join( companies,
cust => cust.CompanyName,
comp => comp.CompanyName,
cust, comp) =>
new {cust.FirstName,cust.LastName,comp.Country}); |
- var customersAndCountries = customers.Join( companies,
cust => cust.CompanyName,
comp => comp.CompanyName,
cust, comp) =>
new {cust.FirstName,cust.LastName,comp.Country});
- var customersOver25 = customers.Where(cust => cust.Age > 25);
var customersOver25 = from cust in customers where cust.Age > 25 select cust;
- var sortedCustomers = customers.OrderBy(cust => cust.FirstName);
var sortedCustomers = from cust in customers orderby cust.FirstName select cust;
- var customersGroupedByAge = customers.GroupBy(cust => cust.Age);
var customersGroupedByAge = from cust in customers group cust by cust.Age;
Внимательно изучите код, выберите верный ответ.
public static void Main()
{
int i = -2147483648;
int j = 2147483647;
uint ui1 = 4294967295;
Console.WriteLine(Int32.MaxValue);
Console.WriteLine(Int32.MinValue);
Console.WriteLine(UInt32.MaxValue);
Console.WriteLine(UInt32.MinValue);
}
32767
-32768
65535
0
compile-time error
compile-time error: Cannot implicitly convert type 'uint' to 'int'
2147483647
-2147483648
4294967295
0
Представлен пустой числовой ряд.
Изучите код, приведенный ниже, и выберите верные утверждения.
int result = numbers.Sum();
Вернет ноль для пустой коллекции
Вернет результат 0
Вернет результат 19
Вернет максимальное значение в числовой коллекции
Вернет сумму значений в числовой коллекции
Внимательно изучите код, представленный ниже.
public static void Main()
{
Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("Total elements: {0}", strQ.Count);
}
Что будет выведено в консоль?
H
e
l
l
o
Hello
Total elements: 0
Total elements: 5
Внимательно изучите код и укажите верные утверждения.
var list = new List<int>();
double result = list.Average();
Вычисляет среднее значение для элементов коллекции целого типа, тип результата – вещественный
Присвоит переменной result значение 0.0
Выбрасывает InvalidOperationException
Вычисляет среднее значение для элементов коллекции целого типа, тип результата – целое
Изучите код, представленный ниже. Выберите верный ответ.
var customersAndCountries = customers.Join( companies,
cust => cust.CompanyName,
comp => comp.CompanyName,
cust, comp) =>
new {cust.FirstName,cust.LastName,comp.Country});
var customersAndCountries1 = from cust in customers
join comp in companies on cust.CompanyName
equals comp.CompanyName
select new {cust.FirstName, cust.LastName, comp.Country};
Примеры иллюстрируют метод расширения OrderBy и соответствующее выражение запроса orderby
Примеры иллюстрируют метод расширения Where и соответствующее выражение запроса where
Примеры иллюстрируют метод расширения GroupBy и соответствующее выражение запроса groupby
Следующие примеры кода иллюстрируют метод расширения Join и соответствующее выражение запроса join
Приведен следующий числовой ряд: 8 2 6 3
Изучите код, представленный ниже, и укажите верные утверждения.
int result = numbers.Min();
Вернет ноль для пустой коллекции
Вернет минимальное значение в числовой коллекции
Вернет результат 2
Выдаст InvalidOperationException для пустой коллекции
Ознакомьтесь с кодом и выберите верные утверждения.
var list = new List<int> { 1, 8, 3, 2 };
double result = (from x in list where x < 5 select x).Average();
Присвоит переменной result значение 3.5
Представлен пример выражения запроса LINQ для вычисления среднего значения элементов, соответствующих указанному предикату
Вычисляет среднее значение для элементов коллекции целого типа, тип результата – целое
Выбрасывает InvalidOperationException
Внимательно изучите код и выберите верные утверждения.
var listA = new List<int>() { 8, 3, 2 };
var listB = listA;
bool result = listA.Equals(listB);
Возникнет ошибка времени компиляции
Возвращает true, поскольку два указанных списка равны по ссылкам (являются одним и тем же экземпляром)
Возвращает false, поскольку указанные два списка не являются одним и тем же экземпляром
Возникнет ошибка времени выполнения
Изучите код и выберите верные утверждения.
var listA = new List<int>() { 8, 3, 2 };
var listB = new List<int>() { 8, 3, 2 };
bool result = listA.Equals(listB);
Возвращает false, поскольку указанные два списка не являются одним и тем же экземпляром
Возникнет ошибка времени компиляции
Возникнет ошибка времени выполнения
Возвращает true, поскольку два указанных списка равны по ссылкам (являются одним и тем же экземпляром)
Сопоставьте описание и пример кода для методов строго типизированного списка List<T>.
Возвращает true, если список содержит элементы, соответствующие указанному предикату, или false, если список не содержит элементов, соответствующих указанному предикату |
· bool result = list.Exists(x => x == 3); |
Копирует все элементы списка в начало указанного массива |
· list.CopyTo(array); |
Копирует все элементы списка в массив, начиная с указанного индекса массива |
· list.CopyTo(array, arrayIndex: 2); |
Копирует диапазон элементов списка в массив, начиная с указанного индекса массива |
· list.CopyTo(index: 1, array: array, arrayIndex: 3, count: 1); |
- CopyTo(array);
- CopyTo(index: 1, array: array, arrayIndex: 3, count: 1);
- bool result = list.Exists(x => x == 3);
- CopyTo(array, arrayIndex: 2);
Установите соответствие между описанием и примером кода для методов строго типизированного списка List<T>.
Добавляет элемент в конец списка |
· list.Add(5); |
Возвращает true, если список содержит указанный элемент, или false, если список не содержит указанного элемента |
· bool result = list.Contains(3); |
Удаляет все элементы из списка. Счетчик равен нулю, емкость не изменилась |
· list.Clear(); |
Добавляет элементы из другого списка (или коллекции IEnumerable) в конец списка |
· listA.AddRange(listB); |
Преобразует элементы с помощью указанного делегата |
· var conv = new Converter<int, decimal>(x => (decimal)(x+1));
var listB = listA.ConvertAll<decimal>(conv); |
- Clear();
- AddRange(listB);
- var conv = new Converter<int, decimal>(x => (decimal)(x+1));
var listB = listA.ConvertAll<decimal>(conv);
- bool result = list.Contains(3);
- Add(5);
Дан список: 8 3 2 6 8
Изучите код и выберите верные утверждения.
int index = list.IndexOf(item: 8, index: 1);
Вернет индекс: 0
Вернет отсчитываемый от нуля индекс первого вхождения элемента в списке
Вернет индекс первого вхождения элемента в списке. Ищет список от указанного индекса до конца списка
Вернет индекс: 4
Сопоставьте описание и пример кода для методов строго типизированного списка List<T>.
Возвращает список с диапазоном элементов исходного списка |
· var listB = listA.GetRange( index: 1, count: 3); |
Вставляет элемент в список по указанному индексу |
· list.Insert(index: 1, item: 5); |
Вставляет элементы другого списка (или объекта, реализующего IEnumerable) в список по указанному индексу |
· listA.InsertRange(index: 1, collection: listB); |
Выполняет указанное действие для каждого элемента в списке. Он делает то же самое, что и стандартный оператор foreach C# |
· list.ForEach(x => { Console.Write(x); }); |
- var listB = listA.GetRange( index: 1, count: 3);
- Insert(index: 1, item: 5);
- InsertRange(index: 1, collection: listB);
- ForEach(x => { Console.Write(x); });
Соотнесите описание с примером кода для методов строго типизированного списка List<T>.
Возвращает первое вхождение элемента, соответствующего указанному предикату |
· int item = list.Find(x => x > 2); |
Возвращает индекс первого элемента, который соответствует указанному предикату. Он ищет список в диапазоне, указанном startIndex и count |
· int index = list.FindIndex( startIndex: 2, count: 2, match: x => x < 5); |
Возвращает список с элементами, соответствующими указанному предикату |
· var listB = listA.FindAll(x => x > 2); |
Возвращает отсчитываемый от нуля индекс первого элемента, который соответствует указанному предикату |
· int index = list.FindIndex(x => x < 5); |
Возвращает индекс первого элемента, который соответствует указанному предикату. Он ищет список от startIndex до конца списка |
· int index = list.FindIndex( startIndex: 2, match: x => x < 5); |
- int index = list.FindIndex(x => x < 5);
- var listB = listA.FindAll(x => x > 2);
- int item = list.Find(x => x > 2);
- int index = list.FindIndex( startIndex: 2, count: 2, match: x => x < 5);
- int index = list.FindIndex( startIndex: 2, match: x => x < 5);
Дан список: 8 3 2 6 8
Внимательно изучите представленный ниже код и выберите верные утверждения.
int index = list.IndexOf(item: 8, index: 1, count: 2);
Вернет индекс: -1
Вернет индекс: 1
Вернет индекс первого вхождения элемента в списке. Ищет список в диапазоне, указанном индексом и счетчиком
Вернет -1, если элемент не будет найден в указанном диапазоне
Приведен список: 8 3 6 2 4 5
Изучите код и выберите верные утверждения.
list.Sort(index: 2, count: 3, comparer: new MyComparer());
Сортирует список с помощью настраиваемого компаратора
Вернет список: 2 3 4 5 6 8
Сортирует указанный диапазон списка с помощью настраиваемого компаратора
Вернет список: 8 3 2 4 6 5
Дан список: 8 3 2 6
Внимательно изучите код, укажите верные утверждения.
list.Sort((x, y) => x.CompareTo(y));
Вернет индекс первого вхождения элемента в списке. Он ищет список в диапазоне, указанном индексом и счетчиком
Вернет список: 8 6 3 2
Сортирует список с использованием делегата сравнения
Вернет список: 2 3 6 8
Сопоставьте описание и пример кода для конструктора строго типизированного списка List<T>.
Создает пустой список целых значений |
· var list = new List<int>(); |
Создает список с указанной емкостью |
· var list = new List<int>(16); |
Создает список и инициализирует его некоторыми элементами (целыми значениями) |
· var list = new List<int>() { 8, 3, 2 }; |
Создает список и инициализирует его элементами другого списка (или массива, или чего-либо другого, что реализует интерфейс IEnumerable) |
· var listA = new List<int>() { 8, 3, 2 };
var listB = new List<int>(listA); |
- var list = new List<int>(16);
- var list = new List<int>() { 8, 3, 2 };
- var list = new List<int>();
- var listA = new List<int>() { 8, 3, 2 };
var listB = new List<int>(listA);
Соотнесите описание с примером кода для методов строго типизированного списка List<T>.
Возвращает индекс последнего элемента, который соответствует указанному предикату. Он ищет в списке от начала до указанного startIndex |
· int index = list.FindLastIndex( startIndex: 2, match: x => x < 5); |
Возвращает отсчитываемый от нуля индекс последнего элемента, который соответствует указанному предикату |
· int index = list.FindLastIndex(x => x < 5); |
Возвращает последнее вхождение элемента, соответствующего указанному предикату |
· int item = list.FindLast(x => x < 5); |
Возвращает индекс последнего элемента, который соответствует указанному предикату в диапазоне, заданном параметром count, и конечный индекс, неожиданно названный startIndex |
· int index = list.FindLastIndex( startIndex: 2, count: 2, match: x => x < 5); |
- int index = list.FindLastIndex( startIndex: 2, match: x => x < 5);
- int index = list.FindLastIndex( startIndex: 2, count: 2, match: x => x < 5);
- int index = list.FindLastIndex(x => x < 5);
- int item = list.FindLast(x => x < 5);
Приведен следующий список: 8 3 2 6
Изучите код и выберите верные утверждения.
list.Sort();
Сортирует все элементы в списке
Вернет список: 8 6 3 2
Метод List <T> работает, только если тип T реализует интерфейс IComparable <T> или IComparable
Вернет список: 2 3 6 8
Вернет индекс первого вхождения элемента в списке. Ищет список в диапазоне, указанном индексом и счетчиком
Внимательно изучите код, представленный ниже. Выберите верный ответ.
public class Program
{
public static void Main()
{
var arlist = new ArrayList()
{
1,
"Summer",
300,
4.5f
};
string Element = (string) arlist[1];
Console.WriteLine(Element);
}
}
Возникнет ошибка времени выполнения
В консоль будет выведено сообщение:
1
В консоль будет выведено сообщение:
Summer
Возникнет ошибка времени компиляции
Внимательно изучите код. Укажите верный ответ.
public class Program
{
public static void Main()
{
var students = new List<Student>() {
new Student(){ Id = 1, Name="Bill" },
new Student(){ Id = 2, Name="Steve" },
new Student(){ Id = 3, Name="Ram" },
new Student(){ Id = 4, Name="Abdul" },
new Student(){ Id = 5, Name="Bill" }
};
var studNames = from s in students
where s.Name == "Bill"
select s;
foreach(var student in studNames) Console.WriteLine(student.Id + ", " +student.Name);
}
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
В консоль будет выведено сообщение:
1, Bill
2, Steve
3, Ram
4, Abdul
5, Bill
В консоль будет выведено следующее сообщение:
Bill
Bill
В консоль будет выведено следующее сообщение:
1, Bill
5, Bill
Нет верного ответа
В консоль будет выведено сообщение:
1
5
Изучите приведенный ниже код и укажите верный ответ.
public class Program
{
public static void Main()
{
SortedList<string,string> cities = new SortedList<string,string>()
{ {"London", "UK"},
{"New York", "USA"}
} ;
cities.Add("Mumbai", "India");
cities.Add("Johannesburg", "South Africa");
foreach(var kvp in cities) Console.WriteLine("key: {0}, value: {1}", kvp.Key , kvp.Value );
}
}
В консоль будет выведено следующее сообщение:
value: UK
value: USA
В консоль будет выведено сообщение:
key: London, value: UK
key: New York, value: USA
key: 3, value: Three
key: 4, value: Four
key: 5, value: Five
key: 6, value: Six
В консоль будет выведено сообщение:
key: Johannesburg
key: London
key: Mumbai
key: New York
В консоль будет выведено сообщение:
key: Johannesburg, value: South Africa
key: London, value: UK
key: Mumbai, value: India
key: New York, value: USA
Приведен список: 8 3 2 6 8
Внимательно изучите код и выберите верные утверждения.
int index = list.IndexOf(8);
Вернет отсчитываемый от нуля индекс первого вхождения элемента в списке
Вернет индекс первого вхождения элемента в списке. Ищет список от указанного индекса до конца списка
Вернет индекс: 0
Вернет индекс: 4
Представлен список: 8 3 2 6 8
Изучите код, укажите верные утверждения.
int index = list.IndexOf(item: 3, index: 1, count: 2);
Вернет индекс: -1
Вернет индекс первого вхождения элемента в списке. Ищет список в диапазоне, указанном индексом и счетчиком
Вернет индекс: 1
Вернет -1, если элемент не будет найден в указанном диапазоне
- Практикум по программированию на C# 2
- Лекция 6.2. Построение динамических запросов и выражений LINQ
- Промежуточный тест 8
Дан следующий код:
string[] people = { "Tom", "Bob", "Sam", "Kate", "Alice" };
string[] peopleRange = people[1..];
Выберите верный результат.
Выберите один ответ:
Bob, Sam, Kate, Alice
Tom, Bob, Sam, Alice
Sam, Kate, Bob, Alice
Bob, Sam, Alice, Kate
Изучите представленный код. Укажите верные утверждения.
var stringList = new List<string> { "1", "8", "33333333", "22" };
int maxLength = stringList.Select(x => x.Length).Max();
Вернет длину самой длинной строки
Вернет максимальное число из списка десятичных чисел
Присвоит переменной maxLength значение 33333333
Вернет null, если коллекция содержит только нулевые значения
Присвоит переменной maxLength значение 8
Внимательно изучите представленный ниже код, выберите верные ответы.
var list = new List<int> { 1, 8, 3, 2 };
int maxNumber = (from x in list where x < 5 select x).Max();
Вернет null, если коллекция содержит только нулевые значения
Присвоит переменной maxNumber значение 3
Вернет максимальное число из элементов в коллекции с учетом указанного предиката
Присвоит переменной maxNumber значение 8
Вернет максимальное число из элементов в коллекции, допускающих значение null
Даны значения коллекции: А Б В Г
Внимательно изучите код и выберите верные утверждения.
long result = items.LongCount();
Вернет количество элементов в коллекции. Результат имеет тип long (Int64), поэтому количество элементов может быть больше, чем Int32.MaxValue (2 147 483 647)
Выдает InvalidOperationException для пустой коллекции
Возвращает ноль
Вернет результат 4
Внимательно изучите приведенный ниже код. Какие утверждения верны?
var numbers = new List<int?> { 1, 8, null, 3 };
int? maxNumber = numbers.Max();
Присвоит переменной maxNumber значение null
Присвоит переменной maxNumber значение 8
Вернет null, если коллекция содержит только нулевые значения
Вернет максимальное число из списка целых чисел, допускающих значение null
Вернет максимальное число из списка десятичных чисел
Изучите представленный ниже код, выберите верный ответ.
var stringList = new List<string> { "88888888", "22", "666666", "333" };
int lengthSum = stringList.Select(x => x.Length).Sum();
int lengthSum = stringList.Sum(x => x.Length);
Возникнет ошибка времени выполнения
Значение переменной lengthSum: null
Значение переменной lengthSum: 19
Значение переменной lengthSum: 0
Представлены числовые значения коллекции: 8 2 6 3
Изучите код и укажите верные утверждения.
double result = numbers.Average();
Возвращает ноль
Выдает InvalidOperationException для пустой коллекции
Вернет результат 4,75
Возвращает среднее значение числовой коллекции
Ознакомьтесь с представленным кодом и выберите верный ответ.
var numbers = new List<int?> { 8, 2, null, 3 };
int? sum = numbers.Sum();
Значение переменной sum = 13
Значение переменной sum = 0
Значение переменной sum = null
Возникнет ошибка времени выполнения
Изучите код и выберите верный результат.
double radius = 20;
double area = Math.PI * Math.Pow(radius, 2);
Console.WriteLine("Площадь круга с радиусом {0} равна {1}", radius, area);
Площадь круга с радиусом 20 равна 1256,63706143592
Площадь круга с радиусом {0} равна {1}
0
Площадь круга с радиусом {20} равна {1256,63706143592}
Сопоставьте метод агрегирования LINQ, определенный в классе Enumerable, с примером кода.
Enumerable.Max |
· int result = numbers.Max(); |
Enumerable.Sum |
· int result = numbers.Sum(); |
Enumerable.Count |
· int result = items.Count(); |
Enumerable.Min |
· int result = numbers.Min(); |
- int result = numbers.Sum();
- int result = items.Count();
- int result = numbers.Max();
- int result = numbers.Min();
Внимательно изучите код, приведенный ниже, и выберите верный ответ.
var numbers = new List<int?> { null };
int? sum = numbers.Sum();
Значение переменной sum = 13
Возникнет ошибка времени выполнения
Значение переменной sum = 0
Значение переменной sum = null
Даны числовые значения коллекции: 8 2 6 3
Изучите код, приведенный ниже, и укажите верные утверждения.
int sum = numbers.Aggregate( func: (result,item) => result+item );
Выберите один или несколько ответов:
Выдает InvalidOperationException для пустой коллекции
Метод Aggregate применяет функцию к каждому элементу коллекции
Вернет результат 19
Возвращает ноль
Изучите представленный код и укажите верный ответ.
var numbers = new List<int>();
int sum = numbers.Sum();
Значение переменной sum = 19
Значение переменной sum = null
Значение переменной sum = 19.7
Значение переменной sum = 0
Соотнесите метод агрегирования LINQ, определенный в классе Enumerable, с примером кода.
Enumerable.Count |
· int result = items.Count(); |
Enumerable.LongCount |
· long result = items.LongCount(); |
Enumerable.Aggregate |
· int sum = numbers.Aggregate( func: (result,item) => result+item ); |
Enumerable.Average |
· double result = numbers.Average(); |
- double result = numbers.Average();
- int sum = numbers.Aggregate( func: (result,item) => result+item );
- int result = items.Count();
- long result = items.LongCount();
Внимательно изучите код и выберите верный ответ.
var numbers = new List<decimal> { 8.1m, 2.2m, 6.1m, 3.3m };
decimal sum = numbers.Sum();
Значение переменной sum = null
Значение переменной sum = 19.7
Значение переменной sum = 0
Значение переменной sum = 19
Внимательно изучите представленный код. Укажите верный ответ.
var numbers = new List<int?>();
int? sum = numbers.Sum();
Возникнет ошибка времени выполнения
Значение переменной sum = 13
Значение переменной sum = 0
Значение переменной sum = null
Внимательно изучите код и выберите верный результат.
double result1 = Math.Round(20.567, 2);
double result2 = Math.Round(20.463, 1);
21
21
20
21
20
20
20,57
20,5
Внимательно изучите представленный код и выберите верный ответ.
var numbers = new List<int> { 8, 2, 6, 3 };
int sum = numbers.Sum();
Значение переменной sum = 19
Значение переменной sum = null
Значение переменной sum = 0
Значение переменной sum = 19.7
Отзывы
Отзывов пока нет.