Member 11725507 Ответов: 2

Есть ли у нас необязательная переменная в модальном классе В C#


Можем ли мы дать его в качестве необязательной переменной в приведенном ниже классе. Потому что я не хочу Obj1, obj2, obj3 для типа запроса, но нужен для другого запроса. Будьте добры, предложите мне.

public Obj1 IsForecasted { get; set; }
     public obj2 ? IsGenerated { get; set; }
     public obj3 ? IsPosted { get; set; }
     public long? startDate { get; set; }
     public long? endDate { get; set; }
     public int?[] s1= new int?[6] { 0, 0, 0, 0, 0, 0 };
     public int?[] s2= new int?[6] { 0, 0, 0, 0, 0, 0 };
     public int?[] s3= new int?[6] { 0, 0, 0, 0, 0, 0 };
     public int?[] s4= new int?[6] { 0, 0, 0, 0, 0, 0 };


Что я уже пробовал:

Я попытался добавить [необязательно] в качестве аннотации данных, но это не разрешено, потому что это применимо только для параметров.

2 Ответов

Рейтинг:
2

OriginalGriff

Вы не можете иметь необязательные данные в классе - экземпляр класса имеет фиксированный размер и не может быть изменен. Подумайте об этом: у вас есть необязательное значение, которого нет для "mode == normal" - поэтому вы создаете экземпляр класса как "нормальный" экземпляр.
Позже вы измените значение mode на "advanced" и попытаетесь использовать необязательное значение. Откуда берется дополнительное пространство? Он не может быть создан, потому что экземпляр имеет фиксированный размер, а выделенное пространство не включает ваше необязательное поле.
Результат: ваше приложение выходит из строя!

Нет, в C#нет необязательных полей.


Рейтинг:
2

Ralf Meier

Для чего вам нужны такие "необязательные переменные"?
Если ваш класс должен иметь эти переменные для использования 1 и не нуждается в некоторых переменных для использования 2, я не понимаю проблемы.
Если вам не нужны переменные, то не используйте их.
Если переменные (в вашем фрагменте кода я вижу их как свойства) должны иметь значения по умолчанию, то используйте внутреннюю переменную для свойства, которое имеет начальное значение :

public int BorderSize {
	get { return my_BorderSize; }
	set { my_BorderSize = value; }
}
private int my_BorderSize = 1;


Member 11725507

{ "недели": [ {
"s1": [ 0, 0,0,0,0, 0],
"С2": [0,0,0,0,0,0],
"С3": [0,0,0,0,0,0],
"С4": [0,0,0,0,0,0],
"isForecasted": null,
"isGenerated": null,
"isPosted": null,
"начальная дата": нуль,
"endDate": null
}
]}
Я опубликовал ответ, сгенерированный JSON, и вместо того, чтобы показывать NUll в ответе, я не хочу, чтобы "isForecasted","isGenerated","isPosted","startDate","endDate" объект. Но в другом ответе я передам значение для вышеперечисленных значений, так что оно будет необходимо для другого сценария. Я надеюсь, что это будет полезно для решения проблемы.

Ralf Meier

Мне очень жаль, но ваш вопрос мне непонятен.
У вас есть решение от UG, которое говорит вам, что возможно, а что невозможно.
Если у вас есть разные сценарии, вы можете сделать это с одним и тем же классом и не использовать некоторые свойства ... или ... у вас есть / используются разные классы.
Вы не можете использовать необязательные переменные или необязательные свойства. Если вы ссылаетесь на метод, вы должны знать, что эти необязательные параметры всегда используются - но иногда со значениями по умолчанию (как указано в определении метода)-вот в чем разница ...

Ralf Meier

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

Member 11725507

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

Ralf Meier

Это зависит...
Как и в каком контексте вы используете свой класс ? Является ли это частью пользовательского интерфейса (является ли это элементом управления)?

Member 11725507

Нет его действия в качестве ответа со стороны службы.

Ralf Meier

Извиняюсь... в этом случае нет другой возможности - вы не можете этого сделать ...