我有一个结构
public struct card
{
PictureBox picture;
double value;
}
我想制作一个数组,并在我继续时添加/删除图片和值。我无法做到这一点
card[] c = new card[13];
c[1].value = 4;
如何分配,阅读和机会值?
答案 0 :(得分:6)
制作value
public
。
public double value;
By default,类/结构级元素为private
,这使得它无法访问。
建议大写公共元素,并使用properties而不是字段,因此使用以下内容会更好:
public double Value { get; set; }
您可能需要考虑将struct
设为class
,因为这不太合适。 (请参阅When to use struct?,大部分时间您将使用C#中的课程)您还可以使用图片及其值的字典:
public Dictionary<Picture, double> Cards;
答案 1 :(得分:0)
C#中的结构不等同于C结构。在C#中,struct具有 by value 复制语义。这可能有点令人困惑。
请考虑以下事项:
import QtQuick 2.3
import QtQuick.Window 2.2
Window {
visible: true
width: 200
height: 200
Rectangle {
width: 100
height: 100
anchors.centerIn: parent
color: "red"
transform: [
Rotation { origin.x: 30; origin.y: 30; axis { x: 0; y: 1; z: 0 } angle: 24 },
Rotation { origin.x: 30; origin.y: 30; axis { x: 1; y: 0; z: 0 } angle: 60 }
]
}
}
您可能希望Card[] cards = new Card[13];
Card card = cards[1];
card.Value = 42;
为42,但当您发现它不是时,您会感到惊讶。这部分是transform。
改为使用cards[1].Value
,它与传递类的引用副本的方式更接近C结构,而不是复制值本身:
class
答案 2 :(得分:0)
结构是一堆与胶带粘在一起的变量。如果你想要一堆与管道胶带粘在一起的独立但相关的变量,通常最好使用一个结构来暴露与管道胶带粘在一起的一堆变量,而不是设计一个试图达到这个目的的类,或者假装成为试图服务于该目的的类的对象的结构。但是,如果你想要一些表现为对象的东西,那么你应该使用一个类。
如图所示定义card
,card[] foo = new card[10]
将foo
识别一个数组,其中包含10个PictureBox
类型的引用和10个double
值。声明card bar;
将为另一个PictureBox
引用和另一个double
定义空间,这些空间与Universe中的任何其他内容无关。说bar = foo[3];
等同于bar.picture = foo[3].picture; bar.value = foo[3].value;
,并且不会在bar
和foo[3]
的字段之间建立任何持久的关系。
管道录制变量结构对于某些目的非常有用,例如保持点的坐标,但重要的是要识别它们的位置。如果希望类型表示对象,请使用类。只有当您希望它将一堆独立但相关的变量用管道连接在一起时才应使用struct
。