Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 结构的默认值无效可以吗?_C#_Class_Struct - Fatal编程技术网

C# 结构的默认值无效可以吗?

C# 结构的默认值无效可以吗?,c#,class,struct,C#,Class,Struct,考虑以下结构 public struct ResizeFactor { public readonly float Horizontal; public readonly float Vertical; public ResizeFactor(float horizontal, float vertical) { if (horizontal <= 0) throw new ArgumentOutOfRangeExc

考虑以下结构

public struct ResizeFactor
{
    public readonly float Horizontal;
    public readonly float Vertical;

    public ResizeFactor(float horizontal, float vertical)
    {
        if (horizontal <= 0)
            throw new ArgumentOutOfRangeException("...");
        if (vertical <= 0)
            throw new ArgumentOutOfRangeException("...");

        Horizontal = horizontal;
        Vertical = vertical;
    }
}
我知道我可以用一个类来代替,只是“禁用”默认的无参数构造函数,但这并不是重点。 问题是:创建这样的结构合法吗?默认值无效的一个


最后但并非最不重要的一点是:这是回答这样一个问题的正确地方吗?或者我应该发布到其他地方,比如

,我会尽力使默认值有效,是的。例如,您可以执行以下操作:

public struct ResizeFactor
{
    private readonly float horizontal;
    private readonly float vertical;

    public float Horizontal => horizontal == 0f ? 1.0f : horizontal;
    public float Vertical => vertical == 0f ? 1.0f : vertical;

    public ResizeFactor(float horizontal, float vertical)
    {
        if (horizontal <= 0)
            throw new ArgumentOutOfRangeException("...");
        if (vertical <= 0)
            throw new ArgumentOutOfRangeException("...");

        this.horizontal = horizontal;
        this.vertical = vertical;
    }
}
public struct ResizeFactor
{
私有只读浮动水平;
私有只读浮动垂直;
公共浮动水平=>水平==0f?1.0f:水平;
公共浮动垂直=>垂直==0f?1.0f:垂直;
公共调整因子(水平浮动、垂直浮动)
{

如果(水平我会尽力使默认值有效,是的。例如,您可以执行以下操作:

public struct ResizeFactor
{
    private readonly float horizontal;
    private readonly float vertical;

    public float Horizontal => horizontal == 0f ? 1.0f : horizontal;
    public float Vertical => vertical == 0f ? 1.0f : vertical;

    public ResizeFactor(float horizontal, float vertical)
    {
        if (horizontal <= 0)
            throw new ArgumentOutOfRangeException("...");
        if (vertical <= 0)
            throw new ArgumentOutOfRangeException("...");

        this.horizontal = horizontal;
        this.vertical = vertical;
    }
}
public struct ResizeFactor
{
私有只读浮动水平;
私有只读浮动垂直;
公共浮动水平=>水平==0f?1.0f:水平;
公共浮动垂直=>垂直==0f?1.0f:垂直;
公共调整因子(水平浮动、垂直浮动)
{
如果(水平如果您在声明结构时,显然可以得到一个未初始化、无效值的结构:

当您使用新操作符创建struct对象时,它会 创建并调用相应的构造函数。与类不同, 可以在不使用新运算符的情况下实例化结构 在这种情况下,没有构造函数调用,这使得分配更加复杂 有效。但是,字段将保持未分配状态,对象 在初始化所有字段之前无法使用

如果您在声明结构时,显然可以得到一个具有未初始化的无效值的结构:

当您使用新操作符创建struct对象时,它会 创建并调用相应的构造函数。与类不同, 可以在不使用新运算符的情况下实例化结构 在这种情况下,没有构造函数调用,这使得分配更加复杂 有效。但是,字段将保持未分配状态,对象 在初始化所有字段之前无法使用


我相信该功能在发布前已被删除。而且它不会在所有情况下都被使用。我相信该功能在发布前已被删除。而且它也不会在所有情况下都被使用。