c# - 使用无参数构造函数初始化 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# 结构中,字段始终使用默认值进行初始化。
虽然有解决方法。如果您真的致力于将其保留为 astruct
并希望该字段默认返回不同的值,我建议转换Values
为完整属性并在未初始化字段的情况下返回所需的值:
private IEnumerable<EnumDto> _values;
public IEnumerable<EnumDto> Values => _values ?? Array.Empty<EnumDto>();
话虽这么说,但对结构这样做并不是最好的做法。
编辑:通过@Marc Gravell 建议更改了解决方案。
推荐阅读
- java - 在地图中使用对象的泛型和类
- python - 如何从熊猫数据框中每7条记录的最大值的数据框中获取整行?
- python - 与 numpy percentile 相比,numpy nanpercentile 的 Python 原因非常慢?
- vue.js - Vuex同步:无法读取未定义的属性
- go - Go-zabbix 库没有通过 id 找到现有事件
- python - 如何使用来自以太网相机的图片和正确类型的变量用于神经网络
- openshift - 具有特定标签名称的 OC Rollout
- android - 按钮高度自定义列表视图
- android - 为什么我的 Flutter 应用在 Android 上请求 Run on Startup 权限?
- windows - 如何将压缩文件放入 Java 程序?