C # передача строки между пустотами - PullRequest
0 голосов
/ 17 августа 2010

Все, что я хочу сделать, это передать строку из одной пустоты в другую.

private void getFilename2()
    {
        if (textBox2.TextLength.Equals("0"))
        {

        }
        else
        {
            string inputString = textBox2.Text.ToString();
            string last = inputString.Substring(inputString.LastIndexOf('\\') + 1);
            string[] filename2 = last.Split('.');
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        getFilename1();
        getFilename2();
string filez = filename2;
}

Я знаю, что это не работает, но я очень незнаком с тем, как перемещать строки в пустотах.

Ответы [ 6 ]

8 голосов
/ 17 августа 2010

Вы должны заменить вашу getFilename2 функцию на

Path.GetFileNameWithoutExtension(textBox2.Text)
5 голосов
/ 17 августа 2010

Лучше всего было бы использовать поле / свойство класса или функцию, которая возвращает значение.

string filez = GetFilename2();

private string GetFilename2() {
{    
    if (textBox2.TextLength.Equals("0")) return "";

    string inputString = textBox2.Text.ToString();    
    string last = inputString.Substring(inputString.LastIndexOf('\\') + 1);    
    return last.Split('.');    
}   
3 голосов
/ 17 августа 2010

Давайте начнем с имени вашего метода: getFilename2.

  • Префикс "get" подразумевает, что метод должен иметь тип возврата
  • Более подходящее имя можетbe SetFileName

Я предполагаю, что существует метод getFileName1, который извлекает имя файла из textBox1 и имеет тот же код, что и getFileName2, но использует textBox1вместо textBox2.Это было бы хорошим местом для рефакторинга вашего кода и создания общего метода, который можно использовать повторно:

private string GetFileName(string str) 
{
  if (string.IsNullOrEmpty(str)) return string.Empty;

  string last = str.Substring(str.LastIndexOf('\\') + 1);    
  return last.Split('.');    
}

Но мы можем снова выполнить рефакторинг и просто использовать встроенный метод .NET:

private string GetFileName(string str) 
{
  return Path.GetFileNameWithoutExtension(str);
}

И теперь, когда есть общий метод, мы можем использовать его по мере необходимости:

private void button1_Click(object sender, EventArgs e)
{
  string filez = GetFileName(textBox2.Text);
}

Теперь у нас есть метод GetFileName ();все, что он делает, - это вызывает встроенный метод .NET метода GetFileNameWithoutExtension ().Таким образом, вместо того, чтобы иметь метод, мы должны просто использовать встроенный метод .NET для возврата имени файла:

private void button1_Click(object sender, EventArgs e)
{
  string filez = Path.GetFileNameWithoutExtension(textBox2.Text);
}

Теперь давайте рассмотрим передачу строки из одного void в другой.Как правило, вы хотите сделать это с помощью внутреннего поля или свойства.Поскольку я неравнодушен к свойствам, я буду использовать их в качестве примера:

private string FileName1 {get; set;}
private string FileName2 {get; set;}

private void SetFileName1()
{
  FileName1 = Path.GetFileNameWithoutExtension(textBox1.Text);
}
private void SetFileName2()
{
  FileName2 = Path.GetFileNameWithoutExtension(textBox2.Text);
}
private void button1_Click(object sender, EventArgs e)
{
  SetFileName1();
  SetFileName2();

  string filez1 = FileName1;
  string filez2 = FileName2;
}

Однако, если вы не хотите использовать внутренние поля или свойства, вы можете установить значения с помощью ref в ответ на Rachel

3 голосов
/ 17 августа 2010

Вы можете передать строку по ссылке в качестве параметра для ваших функций

private void button1_Click(object sender, EventArgs e)
{
    string fileName;
    getFilename1(ref string fileName);
}

private void getFilename1(ref string fileName)
{
    // Whatever you do with fileName here will be reflected in the other function
}
1 голос
/ 17 августа 2010

Если вы передаете строки, в идеале вы должны явно передавать их.IE: заставьте ваши функции принимать и / или возвращать значения, с которыми они будут работать, особенно если возвращаемые значения не предназначены для использования ничем, кроме кода, который вызывает getFilename2.Однако, если вы не можете этого сделать, вы можете объявить private string filename1 = null; public string[] filename2 = null внутри класса, но вне любого из ваших методов.

Если вы идете по этому пути, обязательно удалите все string filename1 или string[] filename2 из ваших методов, или вы в конечном итоге объявите локальную переменную с тем же именем (и никогда не будете устанавливать переменные экземпляра).

0 голосов
/ 17 августа 2010

Вы можете сохранить его в переменной уровня класса. Таким образом, он может быть доступен любой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...