以下代码可以使用。但它们很冗长,所以我想创建一个方法(许多其他的TryParsing要做,这只是一小部分)。
private void button_Click(object sender, EventArgs e)
{
bool resSPos = double.TryParse(txtSPos.Text, out double SPos);
if (resSPos == false) FalseBoolMsg("Starting Position");
bool resTPos = double.TryParse(txtTPos.Text, out double TPos);
if (resTPos == false) FalseBoolMsg("Target Position");
bool resIncr = double.TryParse(txtIncr.Text, out double Increment);
if (resIncr == false) FalseBoolMsg("Increment");
Ch.FunctionA(Ch.FunctionX, SomeInt, Increment, Ch.FunctionY);
Ch.FunctionB(SomeInt, SPos, Ch.FunctionY);
Ch.FunctionA(0, SomeInt, TPos, Ch.FunctionZ);
}
" FalseBoolMsg"只是我为生成MessageBox定义了更高版本的方法。 " txtSPos"," txtTPos"和" txtIncr"只是我的Windows窗体中的TextBoxes。无论如何,下面是我尝试但失败的。我尝试了几种变化,但无济于事。主要是,我有一个问题是' double'参数比字符串更多。
private void TryParseDouble(string ParseTarget, string PointField, string FieldInMsg)
{
bool resBool = double.TryParse(ParseTarget, out double PointField);
if (resBool == false) FalseBoolMsg(FieldInMsg);
}
private void button_Click(object sender, EventArgs e)
{
TryParseDouble("txtSPos.Text", "SPos", "Starting Position");
TryParseDouble("txtTPos.Text", "TPos", "Target Position");
TryParseDouble("txtIncr.Text", "Increment", "Increment");
Ch.FunctionA(Ch.FunctionX, SomeInt, Increment, Ch.FunctionY);
Ch.FunctionB(SomeInt, SPos, Ch.FunctionY);
Ch.FunctionA(0, SomeInt, TPos, Ch.FunctionZ);
}
是的,我可以改变"字符串PointField" to"加倍PointField"在我的方法中,但这意味着当我回想起方法时,我必须键入一个实际数字,而不是输入名称来替换" PointField"。我还需要函数来读取" double Name"由我的方法TryParse生成。谢谢你的考虑。
编辑:感谢John(What is the proper method or keyword to put in a user-defined method that renames a variable in C#?)
,我找到了答案private bool TryParseDouble(string ParseTarget, out double PointField, string FieldInMsg)
{
if (!double.TryParse(ParseTarget, out PointField))
{
FalseBoolMsg(FieldInMsg);
return false;
}
return true;
}
private void button_Click(object sender, EventArgs e)
{
TryParseDouble(txtSPos.Text, out double SPos, "Starting Position");
}
答案 0 :(得分:0)
虽然不完全清楚,但我认为你想根据方法中提供的参数替换TryParse()
方法中的out变量名。在这种情况下,您可以使用如下所示的switch
语句。但是,看不出有任何理由这样做
private void TryParseDouble(string ParseTarget, string PointField, string FieldInMsg)
{
bool resBool;
switch (PointField)
{
case "SPos":
resBool = double.TryParse(ParseTarget, out double SPos);
break;
case "TPos":
resBool = double.TryParse(ParseTarget, out double TPos);
break;
case "Increment":
resBool = double.TryParse(ParseTarget, out double Increment);
break;
default:
break;
}
if (!resBool) FalseBoolMsg(FieldInMsg);
}
您应该将其称为
TryParseDouble(txtTPos.Text, "TPos", "Target Position");