Тип унарного значения

-11

По какой-то странной причине С# имеет двоичный тип "bool", но, похоже, не имеет подобного унарного типа значений.

Чтобы обойти это, я в настоящее время представляю унарные типы как логические и устанавливаю их всегда как ложные, но, конечно, это открывает возможность ошибки позже, что, если я забуду и установил значение true? В идеале был бы тип значения, называемый uool, который я мог бы объявить так:

uool u;

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

Итак, предполагая, что в С# (?) Такой тип значения не может быть? Или, возможно, есть подходящее обходное решение, которое не связано с каким-то неприятным взломом?

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

[Serializable]
class CallType
{
public string Address {get;set;}
public uool Calls;
public int NumberOpen {get;}
}

Изменение: добавлен атрибут Serializable для отображения прецедента. Например:

void SendCall(string message, int priority, CallType type)
{
BinaryStream bs = ....
//serialize CallType to stream
}

спросил(а) 2021-01-19T15:50:32+03:00 9 месяцев, 1 неделя назад
1
Решение
92

Мне не нужно было бы присваивать ему значение, потому что оно может иметь только одно возможное значение.

Тогда это либо постоянное, либо избыточное в вашем коде вообще.

Однако, независимо от того, как может звучать "тип унитарного значения", вы всегда можете использовать перечисление только с одним элементом перечисления:

public enum Useless
{
TheOnlySemanticallyCorrectValue
}

Useless u = Useless.TheOnlySemanticallyCorrectValue;

Эта конструкция может быть совершенно легальной в определенной ситуации. Чтобы привести пример: представьте, что поле должно быть объявлено в протоколе связи или в структуре данных с фиксированным макетом, которая на момент первоначального проектирования может содержать только одно значение. Однако в будущем протокол может быть расширен, а то, что казалось "бесполезным" (и служило простым заполнителем), превращается во что-то очень полезное.

Примечание. Сам факт, что можно законно написать u = 1024; в С# можно забыть ради простоты.

ответил(а) 2021-01-19T15:50:32+03:00 9 месяцев, 1 неделя назад
92

Я думаю, что то, что вы просите, невозможно.

Но вы можете использовать константы.

const string s = "I'm a constant and I'll not change";

Но сама переменная слова говорит сама. Он варьируется

Но ради вас как насчет этого:

struct Uoolean { }

Пустая структура? Независимо от того, какой объект вы создаете из него, ничего не изменится.

ответил(а) 2021-01-19T15:50:32+03:00 9 месяцев, 1 неделя назад
65

Я бы сказал, что bool отлично справится с работой, со следующим соглашением:

    false: переменная не имеет значения true: переменная имеет значение

Или вы можете использовать bool? переменная, которая имеет параметр Value или имеет значение null, когда нет.

ответил(а) 2021-01-19T15:50:32+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема