如何通过制作" out"来定义方法变量可以在C#中改变?

时间:2018-05-16 11:55:46

标签: c# methods double tryparse

以下代码可以使用。但它们很冗长,所以我想创建一个方法(许多其他的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");
}

1 个答案:

答案 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");