【问题标题】:C# array memberC# 数组成员
【发布时间】:2019-12-31 16:36:35
【问题描述】:

这是我的代码,它在数组声明的变量下给出了红色波浪线,说明,

固定大小的缓冲区字段只能是结构的成员

float 是一个值类型,所以我不太明白这个消息。 创建 13 个元素(0 到 12;我忽略索引 0)的公共数组的正确语法是什么...

class clsUtility
{
    public int UtilityId { get; set; }
    public fixed float InterpolationFactorMonth[13];      // <-- HERE IS THE PROBLEM
}

【问题讨论】:

  • 正确的语法是将其声明为浮点数组,并分配一个 13 元素的数组并赋值给它,如下所示:public float[] InterpolationFactorMonth = new float[13];。如错误所示,固定数组只能从结构中使用,并且通常仅用于需要将结构传递给一些外部非托管代码的互操作/编组场景。
  • Lasse,是的。如果您作为答案发布,我会接受...我认为它只有 13 个元素的事实意味着它是固定的。所以固定数组是另外一回事......
  • 你已经得到了 Jon 的一个很好的答案,没有必要再创建一个。

标签: c# arrays


【解决方案1】:

如果您想要一个固定大小的内联数组,则必须根据编译器错误在结构中声明。如果您实际上对正常引用数组感到满意,则需要区分声明和初始化。例如:

// Note: Utility isn't a great name either, but definitely lose the "cls" prefix.
class Utility
{
    public int UtilityId { get; set; }
    public float[] InterpolationFactorMonth { get; } = new float[13];
}

这声明了一个float[] 类型的只读属性,并使用一个包含 13 个元素的新数组对其进行初始化。

【讨论】:

    【解决方案2】:

    首先,在这种情况下不能使用fixed。 你可以使用public float[] InterpolationFactorMonth = new float[13]; 创建一个大小为 13 的数组。

    【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2018-02-18
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多