首页 > 解决方案 > 在 C# 中为可空结构的成员赋值

问题描述

在 C# 中,我有一个这样的结构:

public struct Slab
{   public float[] sizeM;
    public string textureSrc;
    //more members, not relevant here...
}

还有一个是这样的:

public struct Tombstone
{   public Slab mainSlab;
    public Slab? basing;
    //more...
}

现在,我想修改基础成员:

uiState[0].stone.basing.Value.sizeM[2] = Int32.Parse(breadthField.Value) / 100.0f;
uiState[0].stone.basing.Value.textureSrc = fileName;

uiState[0].stone是类型Tombstone

这两个调用中的第一个可以正常工作,因为我只是在更改数组的成员basing,而不是数组本身。然而,第二个抱怨:

Cannot modify the return value of 'Slab?.Value' because it is not a variable

如果我对mainSlab不可为空的情况执行相同操作,它会起作用。有没有办法做到这一点而不将整个复制basing到局部变量中进​​行更改?

标签: c#nullablevalue-type

解决方案


有没有办法在不将整个基础复制到局部变量进行更改的情况下做到这一点?

不,因为Nullable<T>不提供对基础值字段的直接访问。您不能“就地”修改它。

当你使用可变结构时,会有各种各样的小问题。我强烈建议您尽可能使用类或不可变结构,以避免这些极端情况。


推荐阅读