首页 > 解决方案 > 使用无参数构造函数初始化 Struct

问题描述

我正在尝试使用结构(第一次)并提出了一个我不知道如何解决的小问题。

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它是一种类型,而不是实例值,因此它不算作参数。

因此,如果构造函数没有参数,我会收到编译器警告。

如果我添加一个可选值“输入”,我可以欺骗编译器并且警告消失,但构造函数仍然不会触发(可能是因为它是空的)。

除了将其更改为 class之外,还有其他解决方法吗?

所有建议表示赞赏。

标签: c#struct

解决方案


对于无参数构造函数 - 没有办法让它触发。在 C# 结构中,字段始终使用默认值进行初始化。

虽然有解决方法。如果您真的致力于将其保留为 astruct并希望该字段默认返回不同的值,我建议转换Values为完整属性并在未初始化字段的情况下返回所需的值:

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

话虽这么说,但对结构这样做并不是最好的做法。

编辑:通过@Marc Gravell 建议更改了解决方案。


推荐阅读