如果变量是在不同的方法中声明的,我如何在一个方法中使用它?C#

如果变量是在不同的方法中声明的,我如何在一个方法中使用它?C#,c#,variables,methods,C#,Variables,Methods,因此,我试图找出“重用”以前方法中的变量的最简单方法,但却找不到确切的方法 基本上,我有一个简单的程序,使用openFileDialog打开一个文本文件(只需单击一个按钮)。在另一个按钮中,单击它,将我写入的内容写入文件 我遇到的问题是编写文件,因为我无法重用方法1中的path变量:/ 这是我的密码: public void button1_Click(object sender, EventArgs e) { OpenFileDialog OFD = new

因此,我试图找出“重用”以前方法中的变量的最简单方法,但却找不到确切的方法

基本上,我有一个简单的程序,使用openFileDialog打开一个文本文件(只需单击一个按钮)。在另一个按钮中,单击它,将我写入的内容写入文件

我遇到的问题是编写文件,因为我无法重用方法1中的path变量:/

这是我的密码:

    public void button1_Click(object sender, EventArgs e)
    {

        OpenFileDialog OFD = new OpenFileDialog();
        OFD.Title = "Choose a Plain Text File";
        OFD.Filter = "Text File | *.txt";
        OFD.ShowDialog();
        string filePath = OFD.FileName;
        if (OFD.FileName != "") {
            using (StreamReader reader = new StreamReader(@filePath))
            {

                while (!reader.EndOfStream)
                {

                    richTextBox1.AppendText(reader.ReadLine());

                }

                reader.Close();
            }
        }
    }

    public string filePath;

    public void button2_Click(object sender, EventArgs e)
    {
        using (StreamWriter writer = new StreamWriter(@filePath)){

            writer.WriteLine(richTextBox1.Text);
            writer.Close();
        }
    }

将其设置为实例变量

string path = "";

public void FirstMethod()
{
  path = "something";
}

public void SecondMethod()
{
  doSomething(path);
}

将其设置为实例变量

string path = "";

public void FirstMethod()
{
  path = "something";
}

public void SecondMethod()
{
  doSomething(path);
}

在您的方法中,只需删除声明字符串filePath,使其看起来像

filePath = OFD.FileName;

这就是方法中的全部内容,只需删除声明字符串filePath,使其看起来像

filePath = OFD.FileName;

这就是你不能在你发布的代码中添加的所有内容,因为它超出了范围并且消失了

您可以让第一个方法返回选择,然后将其传递给第二个方法。那就行了

我不喜欢你的方法名<代码>按钮2\u单击<代码>按钮1\u单击?没有人告诉客户该方法的作用


你的方法可能做得太多了。我可能有一种方法来选择文件,另一种方法用于读写。

你不能在你发布的代码中使用,因为它超出了范围,已经消失了

public string filePath;

public void button1_Click(object sender, EventArgs e)
{

    OpenFileDialog OFD = new OpenFileDialog();
    OFD.Title = "Choose a Plain Text File";
    OFD.Filter = "Text File | *.txt";
    OFD.ShowDialog();
    filePath = OFD.FileName;
    if (OFD.FileName != "") {
        using (StreamReader reader = new StreamReader(@filePath))
        {

            while (!reader.EndOfStream)
            {

                richTextBox1.AppendText(reader.ReadLine());

            }

            reader.Close();
        }
    }
}

public void button2_Click(object sender, EventArgs e)
{
    // you should test a value of filePath (null, string.Empty)

    using (StreamWriter writer = new StreamWriter(@filePath)){

        writer.WriteLine(richTextBox1.Text);
        writer.Close();
    }
}
您可以让第一个方法返回选择,然后将其传递给第二个方法。那就行了

我不喜欢你的方法名<代码>按钮2\u单击<代码>按钮1\u单击?没有人告诉客户该方法的作用


你的方法可能做得太多了。我可能有一种方法来选择文件和单独的文件进行读写。

按钮1\u单击中的
文件路径
字符串声明
字符串的一个新实例,该实例位于成员实例所在的范围内。删除
字符串
类型,使方法中的
文件路径
引用成员实例。很可能您也不需要emmeber实例是公共的,但应该是私有的,因为它允许这两种方法通信

public string filePath;

public void button1_Click(object sender, EventArgs e)
{

    OpenFileDialog OFD = new OpenFileDialog();
    OFD.Title = "Choose a Plain Text File";
    OFD.Filter = "Text File | *.txt";
    OFD.ShowDialog();
    filePath = OFD.FileName;
    if (OFD.FileName != "") {
        using (StreamReader reader = new StreamReader(@filePath))
        {

            while (!reader.EndOfStream)
            {

                richTextBox1.AppendText(reader.ReadLine());

            }

            reader.Close();
        }
    }
}

public void button2_Click(object sender, EventArgs e)
{
    // you should test a value of filePath (null, string.Empty)

    using (StreamWriter writer = new StreamWriter(@filePath)){

        writer.WriteLine(richTextBox1.Text);
        writer.Close();
    }
}
 public void button1_Click(object sender, EventArgs e)
    {
        // etc.
        filePath = OFD.FileName;
    }

 private string filePath;

单击按钮1中的
文件路径
字符串声明了
字符串
的一个新实例,该实例位于隐藏成员实例的范围内。删除
字符串
类型,使方法中的
文件路径
引用成员实例。很可能您也不需要emmeber实例是公共的,但应该是私有的,因为它允许这两种方法通信

 public void button1_Click(object sender, EventArgs e)
    {
        // etc.
        filePath = OFD.FileName;
    }

 private string filePath;

您已经声明了与类成员同名的局部变量,所以在方法中设置“filePath”时,只需设置局部“filePath”,而不是类成员“filePath”。在内部作用域(您的button1_Click方法)中使用相同类型和名称声明的变量总是对外部作用域(在这种情况下是您的类)隐藏这些变量。您已使用与类成员相同的名称声明了局部变量,因此当您在方法中设置“filePath”时,您只需设置局部“filePath”而不是类成员“filePath”。在内部作用域(您的button1_Click方法)中使用相同类型和名称声明的变量总是对外部作用域(在这种情况下是您的类)隐藏这些变量。如果您接受answer,则为n ice。如果您接受answer,则为n ice。