Как определить метод, сделав переменную "out" изменяемой в C #? - PullRequest
0 голосов
/ 16 мая 2018

Эти коды ниже работают.Но они длинные, поэтому я хотел создать метод (для этого нужно сделать много других 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.Во всяком случае, ниже то, что я пытался, но не получилось.Я пробовал несколько вариантов, но безрезультатно.В основном, у меня проблема с параметром '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);             

}

Да, я могу изменить "string PointField" на "double PointField" в моем методе, но это означает, что я долженвведите действительное число, когда я вспоминаю метод, вместо того, чтобы вводить имя для замены «PointField».Мне также нужны функции для чтения «двойного имени», созданного TryParse из моего метода.Спасибо за ваше внимание.

Редактировать: Я нашел ответ благодаря Джону ( Какой правильный метод или ключевое слово следует добавить в определяемый пользователем метод, который переименовывает переменную в 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 голосов
/ 16 мая 2018

Хотя это и не совсем понятно, но я думаю, что вы хотите заменить имя переменной out в вашем TryParse() методе на аргумент, предоставленный в методе. В этом случае вы можете использовать оператор 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...