我一直在:
数组初始值设定项只能在变量或字段中使用 初始化。请尝试使用新表达式。
我不知道为什么。这是不可能用C#。类似的构造适用于简单类型,如int或float。
public struct UnitObject
{
public float v;
public string t;
public string d;
}
public class UnitStandard
{
public UnitObject[] UnitDict = new UnitObject[] { { 1f, "s", "s" } };
}
使用.NET 4.5。
答案 0 :(得分:3)
您希望如何工作并不完全清楚,但在c#中,它不是有效的语法。您有两种选择:
使用构造函数
public struct UnitObject
{
public UnitObject(float v, string t, string d)
{
this.v = v;
this.t = t;
this.d = d;
}
}
public UnitObject[] UnitDict = new UnitObject[] { new UnitObject(1, "s", "s") };
使用对象初始值设定项
public UnitObject[] UnitDict = new UnitObject[]
{
new UnitObject
{
v = 1,
t = "s",
d = "s"
}
};
作为旁注:v
,t
和d
是可怕的名字,因为它们不提供意义,公众成员应该遵循PascalCase。
为了遵循正确的不变性模式,请使用:
public struct UnitObject
{
public float V { get; private set; }
public string T { get; private set; }
public string D { get; private set; }
public UnitObject(float v, string t, string d)
{
V = v;
T = t;
D = d;
}
}
答案 1 :(得分:1)
我在这里回答我自己的问题,因为我被告知这是帮助他人的最佳方式 - 而不是编辑问题。
我通过添加构造函数来实现此目的:
public struct UnitObject
{
public float v;
public string t;
public string d;
public UnitObject(float val, string s1, string s2)
{
v = val; t = s1; d = s2;
}
}
public class UnitStandard
{
public UnitObject[] UnitDict = new UnitObject[] { new UnitObject( 1f, "s", "s" ) };
}
但Camilo的答案当然要优雅得多。