假设我有这样的结构:
public struct MyCustomDataset : IEnumerable<float> {
public float v1;
public float v2;
public float v3;
public MyCustomDataset(float v1, float v2, float v3) {
this.v1 = v1;
this.v2 = v2;
this.v3 = v3;
}
// Enumerable impl
public IEnumerator<float> GetEnumerator() {
yield return v1;
yield return v2;
yield return v3;
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
}
这样的方法:
public static MyCustomDataset test() {
return new MyCustomDataset(1,2,3);
}
public static void test2() {
MyCustomDataset ds = test();
/* doing stuff with ds */
}
如果MyCustomDataset是class而不是struct,我想知道它是否更优。我需要知道,因为我在应用程序主循环中调用test(),所以MyCustomDataset将在每个应用程序迭代中分配。因此,我不会让MyCustomDataset成为一个班级,因为它会像表演自杀一样。我正在考虑使用struct,因为我怀疑它在这种情况下可能表现得或多或少像原始类型。
表现会好吗?
我不打算将MyCustomDataset分配给任何类字段,我只会在方法体中读取它,并且可能会将它传递给一些方法调用,因此它将存在于少数局部范围内。
答案 0 :(得分:2)
您:
因为这就像表演自杀
你为什么这么认为?你指的是结构和类之间有什么区别?
我认为你应该使用结构,如果你觉得它或多或少像“原始类型”(你的话)。这只是三个float
值(可能总共96位),因此它对于值类型来说足够小。但是如果您坚持使用结构,请创建字段readonly
。