Member 10836284 Ответов: 4

Необязательное свойство в классе C#


Optional property
I want to create a class that has an optional property. I don't want to create a subclass
Example
public class MyClass
    {
        public MyClass( int extraPoperty)
        {
            // Something like this
            if(extraPoperty==1)
            public int ExtraPoperty { get;  set; }

        }

        public int EntityId { get;  set; }
    }

Is this possible?


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

Я ничего не могу найти в интернете

Graeme_Grant

if(extraPoperty==1) - это флаг времени компиляции или времени выполнения?

Richard MacCutchan

Не имеет значения, так как это не сработает в любом случае.

Graeme_Grant

Я просто пытался заставить его/ее лучше объяснить, что они пытаются сделать...

Richard MacCutchan

Ха-ха, удачи тебе с этим. :)
Кроме того, это репост того же вопроса OP на форуме C#.

Graeme_Grant

а... лол

Ralf Meier

Как я уже писал в C#-дискуссиях-форуме :
Чтобы ответить на этот вопрос, необходимо знать, чего вы пытаетесь достичь. В зависимости от этого это может быть возможно (или нет).

4 Ответов

Рейтинг:
2

F-ES Sitecore

Лучше всего, вероятно, обнуляемое поле

public int? MyProperty {get;set;}


Если поле равно null, то можно предположить, что оно не было предоставлено.


0x01AA

Я не согласен, что это "лучшая ставка", но это прагматичная попытка, +5

Рейтинг:
1

OriginalGriff

Нет - вы не можете определить свойство в методе или конструкторе, только в теле класса.

Что именно ты пытаешься сделать? Как ты думаешь, зачем тебе это нужно?


Рейтинг:
1

Member 13739613

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

[Атрибут Attributeusage(Явное Управление Размещением.Собственность,
Унаследовано = ложь,
AllowMultiple = false)]
внутренний запечатанный класс OptionalAttribute : атрибут
{
}

открытый класс человек
{
public string Name { get; set; }

[Необязательный]
public string NickName { get; set; }
}


Рейтинг:
0

Mehdi Gholam

Нет, это невозможно, ваше свойство либо определено, либо нет, оно не может быть условным.

Однако вы можете иметь dynamic занятия с ExpandoObject :
Использование типа dynamic (руководство по программированию на C#) | Microsoft Docs[^]

системы.динамически.expandoobject[системы.динамически.expandoobject]

Создание динамического расширяемого объекта C# Expando - Веб-журнал Рика Штрала[^]


Ralf Meier

Вы правы... и вы не правы ...
Свойство должно быть определено ... но в зависимости от выбора (в другом месте) он может быть невидимым или видимым.