我有3个变量,分别为gxpos
,gypos
和gzpos
。我有一个名为moove()
的方法,带有一个string
自变量轴(x,y或z),我希望能够更改两个变量(gxpos,gypos,gzpos)。
在代码示例中,我通过此?
表示了我希望轴变量的位置。
public void moove(string axis)
{
g(?)pos = (?)pos + trkSizeStep.Value;
if (g(?)pos != m(?)pos || -g(?)pos != m(?)pos)
{
(?)pos = g(?)pos;
port.WriteLine(axis + (?)pos);
lblpos(?).Text = (?)pos.ToString();
}
else
{
errorLimit(axis, 1);
}
}
答案 0 :(得分:0)
在C#中,如果没有反思或使用T4 Templates之类的外部工具,这是不可能的。
但是,您也许可以通过使用数组来解决此问题:
int[] gpos = new int[] { gxpos, gypos, gzpos };
int[] pos = new int[] { xpos, ypos, zpos };
int[] mpos = new int[] { mxpos, mypos, mzpos };
string axisNames = new string[] { "x", "y", "z" };
public void moove(int axis)
{
gpos[axis] = pos[axis] + trkSizeStep.Value;
if (gpos[axis] != mpos[axis] || -gpos[axis] != mpos[axis])
{
pos[axis] = gpos[axis];
port.WriteLine(axisNames[axis] + pos[axis]);
lblpos[axis].Text = pos[axis].ToString();
}
else
{
errorLimit(axisNames[axis], 1);
}
}
或更妙的是,利用Vector<T>
和朋友
答案 1 :(得分:0)
使用字典:
var gpos = new Dictionary<string, int> { { "x", 0 }, { "y", 0 }, { "z", 0 } };
var mpos = new Dictionary<string, int> { { "x", 0 }, { "y", 0 }, { "z", 0 } };
var pos = new Dictionary<string, int> { { "x", 0 }, { "y", 0 }, { "z", 0 } };
var lblpos = new Dictionary<string, Label> { { "x", lblxpos }, { "y", lblypos }, { "z", lblzpos } };
public void moove(string axis)
{
gpos[axis] = pos[axis] + trkSizeStep.Value;
if (gpos[axis] != mpos[axis] || -gpos[axis] != mpos[axis])
{
pos[axis] = gpos[axis];
port.WriteLine(axis + pos[axis]);
lblpos[axis].Text = pos[axis].ToString();
}
else
{
errorLimit(axis, 1);
}
}