gpt4 book ai didi

c# - 使用无参数构造函数初始化 Struct

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:47 27 4
gpt4 key购买 nike

我尝试使用一个结构(这是第一次),但遇到了一个我不知道如何解决的小问题。

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”,我可以欺骗编译器并且警告消失,但构造函数仍然不会触发(大概是因为它是空的)。

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

感谢所有建议。

最佳答案

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

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

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

话虽这么说,但对结构执行此操作并不是最佳做法。

编辑:根据@Marc Gravell 的建议更改了解决方案。

关于c# - 使用无参数构造函数初始化 Struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56521713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com