Как использовать/включить #nullable в С# winforms.net 4.8? ⇐ C#
-
Anonymous
Как использовать/включить #nullable в С# winforms.net 4.8?
публичное событие EventHandler? Загрузка завершена; публичное событие EventHandler? Прогресс загрузки; получение предупреждения по обоим символам '?'
Аннотации для ссылочных типов, допускающих значение NULL, следует использовать только в коде в контексте аннотаций #nullable.
Должен ли я как-то включить обнуляемое значение? или просто проверяете, когда нужно убедиться, что оно не равно нулю?
когда следует использовать #nullable?
Какую дополнительную информацию мне следует предоставить? я предоставил всю необходимую информацию. Я хочу знать, как обрабатывать эти предупреждения.
Это код класса:
с использованием системы; использование System.IO; используя System.Net.Http; использование System.Threading; использование System.Threading.Tasks; пространство имен Downloading_Files { общедоступный класс DownloadingCore { общедоступный класс DownloadeCompletedEventArgs: EventArgs { общественный bool IsSuccess {получить; набор; } общественный bool IsCancelled {получить; набор; } общедоступная строка FilePath {получить; набор; } = строка.Пусто; // Инициализируем пустой строкой } общедоступный класс DownloadProgressEventArgs: EventArgs { общественный ИНТ Процент {получить; набор; } } общедоступный класс DownloadManager { общественный длинный ContentLength {get; частный набор; } // Предоставляем ContentLength как свойство публичное событие EventHandler? Загрузка завершена; публичное событие EventHandler? Прогресс загрузки; общедоступная асинхронная задача StartDownload (строка URL, строка filePath, CancellationToken cancelToken) { пытаться { используя (var client = новый HttpClient()) { вар ответ = ждут client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancelToken); ответ.EnsureSuccessStatusCode(); ContentLength = ответ.Content.Headers.ContentLength.GetValueOrDefault(); // Установка длины контента вар totalBytesRead = 0L; используя (var contentStream = ожидайте ответа.Content.ReadAsStreamAsync()) используя (var fileStream = новый FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { вар буфер = новый байт [8192]; число байтовRead; while ((bytesRead = await contentStream.ReadAsync(buffer, 0, buffer.Length, cancelToken)) > 0) { ждут fileStream.WriteAsync(buffer, 0, bytesRead, cancelToken); TotalBytesRead += bytesRead; если (ДлинаСодержания > 0) { var ProgressPercentage = (int)((Float)totalBytesRead / ContentLength * 100); OnDownloadProgress (новый DownloadProgressEventArgs {Percentage = ProgressPercentage}); } } } OnDownloadCompleted (новый DownloadeCompletedEventArgs {IsSuccess = true, FilePath = filePath}); } } поймать (OperationCanceledException) { // Обработка отмены OnDownloadCompleted (новый DownloadeCompletedEventArgs {IsCancelled = true, FilePath = filePath}); } поймать (Исключение ex) { строка exx = ex.ToString(); OnDownloadCompleted (новый DownloadeCompletedEventArgs {IsSuccess = false, FilePath = filePath}); } } защищенная виртуальная пустота OnDownloadCompleted (DownloadeCompletedEventArgs e) { DownloadCompleted?.Invoke(this, e); } защищенная виртуальная пустота OnDownloadProgress (DownloadProgressEventArgs e) { DownloadProgress?.Invoke(this, e); } } } }
публичное событие EventHandler? Загрузка завершена; публичное событие EventHandler? Прогресс загрузки; получение предупреждения по обоим символам '?'
Аннотации для ссылочных типов, допускающих значение NULL, следует использовать только в коде в контексте аннотаций #nullable.
Должен ли я как-то включить обнуляемое значение? или просто проверяете, когда нужно убедиться, что оно не равно нулю?
когда следует использовать #nullable?
Какую дополнительную информацию мне следует предоставить? я предоставил всю необходимую информацию. Я хочу знать, как обрабатывать эти предупреждения.
Это код класса:
с использованием системы; использование System.IO; используя System.Net.Http; использование System.Threading; использование System.Threading.Tasks; пространство имен Downloading_Files { общедоступный класс DownloadingCore { общедоступный класс DownloadeCompletedEventArgs: EventArgs { общественный bool IsSuccess {получить; набор; } общественный bool IsCancelled {получить; набор; } общедоступная строка FilePath {получить; набор; } = строка.Пусто; // Инициализируем пустой строкой } общедоступный класс DownloadProgressEventArgs: EventArgs { общественный ИНТ Процент {получить; набор; } } общедоступный класс DownloadManager { общественный длинный ContentLength {get; частный набор; } // Предоставляем ContentLength как свойство публичное событие EventHandler? Загрузка завершена; публичное событие EventHandler? Прогресс загрузки; общедоступная асинхронная задача StartDownload (строка URL, строка filePath, CancellationToken cancelToken) { пытаться { используя (var client = новый HttpClient()) { вар ответ = ждут client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancelToken); ответ.EnsureSuccessStatusCode(); ContentLength = ответ.Content.Headers.ContentLength.GetValueOrDefault(); // Установка длины контента вар totalBytesRead = 0L; используя (var contentStream = ожидайте ответа.Content.ReadAsStreamAsync()) используя (var fileStream = новый FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { вар буфер = новый байт [8192]; число байтовRead; while ((bytesRead = await contentStream.ReadAsync(buffer, 0, buffer.Length, cancelToken)) > 0) { ждут fileStream.WriteAsync(buffer, 0, bytesRead, cancelToken); TotalBytesRead += bytesRead; если (ДлинаСодержания > 0) { var ProgressPercentage = (int)((Float)totalBytesRead / ContentLength * 100); OnDownloadProgress (новый DownloadProgressEventArgs {Percentage = ProgressPercentage}); } } } OnDownloadCompleted (новый DownloadeCompletedEventArgs {IsSuccess = true, FilePath = filePath}); } } поймать (OperationCanceledException) { // Обработка отмены OnDownloadCompleted (новый DownloadeCompletedEventArgs {IsCancelled = true, FilePath = filePath}); } поймать (Исключение ex) { строка exx = ex.ToString(); OnDownloadCompleted (новый DownloadeCompletedEventArgs {IsSuccess = false, FilePath = filePath}); } } защищенная виртуальная пустота OnDownloadCompleted (DownloadeCompletedEventArgs e) { DownloadCompleted?.Invoke(this, e); } защищенная виртуальная пустота OnDownloadProgress (DownloadProgressEventArgs e) { DownloadProgress?.Invoke(this, e); } } } }
Мобильная версия