Инициализируйте Struct с помощью конструктора без параметров - PullRequest
2 голосов
/ 10 июня 2019

Я пытаюсь работать со структурой (впервые), и у меня возникла небольшая проблема, я не знаю, как ее обойти.

public struct TextSelect<TEnum> where TEnum : Enum
{
    public TextSelect(string input = "")
    {
        Input = input;
        Values = EnumDto.ToList<TEnum>();
    }

    public string Input { get; set; }
    public IEnumerable<EnumDto> Values { get; }
}

public TextSelect<IndustryType> Industry = new TextSelect<IndustryType>();

Проблема связана с параметрами без параметровКонструкторы.

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

Таким образом, я получаю предупреждение компилятора, если конструктор не имеет параметров.

Если я добавлю необязательное значение 'Input', я могу обмануть компилятор, и предупреждение исчезнет, ​​но конструктор все еще не 't огонь (предположительно потому, что он пуст).

Кроме изменить его на класс , есть ли другие обходные пути?

Все советы приветствуются.

1 Ответ

0 голосов
/ 10 июня 2019

Для конструктора без параметров - его невозможно запустить. В структуре C # поля всегда инициализируются значениями по умолчанию.

Хотя есть обходные пути. Если вы действительно обязуетесь хранить это значение как struct и хотите, чтобы поле возвращало другое значение по умолчанию, я бы рекомендовал преобразовать Values в полное свойство и вернуть желаемое значение, если поле не было инициализировано:

private IEnumerable<EnumDto> _values;
public IEnumerable<EnumDto> Values => _values ?? Array.Empty<EnumDto>();

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

Редактировать: изменение решения по предложению @Marc Gravell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...