Рекомендации по обработке и именованию промежуточных/временных переменных в C#

В моем бэкэнде C# (.Net 6) (но также и в других языках) я часто сталкиваюсь с проблемой, что я получаю объект, который мне нужно проверить и преобразовать перед его использованием. В настоящее время я справляюсь с этим, создавая две переменные: fooRaw и foo. Я сохраняю ответ на fooRaw, затем проверяю его. После этого я анализирую его и сохраняю результат в foo.

Я не очень уверен, что это лучший способ сделать это - может быть, кто-то там может просветить меня или, по крайней мере, вдохновить меня, как я могу это улучшить.

Два примера:
Пример 1:

List<FooType> fooRaw = GetFoos(filter: "id = '123'");
// id should be unique therefor only one result is valid
if (fooRaw.Count != 1){
    throw //...
}

FooType foo = fooRaw.First();

Пример 2:

string fooRaw = await httpResponse.Content.ReadAsStringAsync();
// I have a http response that i want to parse -> only works if string is not empty
if (!string.IsNullOrWhitespace(fooRaw)){
    throw //...
}

FooType foo = JsonSerializer.Deserialize<FooType>(fooRaw);

Любые идеи, как я мог бы улучшить этот процесс или, по крайней мере, улучшить именование переменных и удобочитаемость?

Вы имеете в виду "временный"?

ProgrammingLlama 31.05.2023 09:30

Это больше вопрос для проверки кода стека, а не переполнения? Здесь мы решаем проблемы, где в обзоре они могут помочь вам с чем-то вроде этого немного лучше, без того, чтобы люди немного (много) ссорились.

Simon Price 31.05.2023 09:36
if (!string.IsNullOrWhitespace(fooRaw)){ - значит, вы выбрасываете исключение, ЕСЛИ fooRaw НЕ Null или WhiteSpace, т.е. имеет контент?
Fildor 31.05.2023 10:13

@SimonPrice Этот вопрос будет закрыт при проверке кода как слишком гипотетический. Судя по именам типов, это не настоящий код из реального рабочего проекта.

pacmaninbw 31.05.2023 16:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Обычно, когда мне нужно назвать быстрые переменные, я делаю их по крайней мере связанными с тем, что они должны извлекать, но я делаю это более коротким словом или словом без заглавных букв, чтобы указать на его краткое использование.

как var doc = document или var collect = Collection.FirstOrDefault()

Тем не менее, я бы предпочел вообще не сокращать их и отдавать приоритет читабельности, поскольку вам нужно понять это, когда кто-то другой или вы через несколько месяцев оглядываетесь на код.

Ответ принят как подходящий

Ваше решение в порядке, а суффикс Raw хорошо указывает на то, что это необработанное, непроверенное значение. Я бы, вероятно, использовал rawFoo вместо fooRaw, так как это звучит более «естественно» (и Visual Studio не будет предлагать автодополнение fooRaw, если вы начнете вводить foo), но это может быть делом вкуса.

Если вы хотите избежать необработанной переменной в области действия после проверки (чтобы кто-то мог случайно использовать ее вместо проверенного значения), а ваша логика проверки просто выдает исключения, вы можете выделить свою логику проверки в отдельный метод и избежать промежуточной переменной:

var foo = ValidateFoo(GetRawFoo(...));

Другие вопросы по теме