1

这个问题包含了我在 C# 中遇到的两个问题(很可能是相互关联的)。我真的希望这在其他地方没有得到明确的回答,因为我不确定要使用什么搜索词,到目前为止还没有遇到任何可以令人满意地向我解释它的东西。我有一个isHighScore()在我的 C# 文字游戏中调用的函数。基本上发生的事情是,无论我尝试以不同的方式对其进行格式化、删除使用、try/catch,我似乎都无法将变量写入文件。我已经为第一次阅读本文的人大幅编辑了代码,以说明(对我而言)似乎更多的范围问题。

private void isHighScore() //Having problems...
    {
        string strHighScore;

        try
        {
            StreamReader readHighScore = new StreamReader(strPath + "WAHS.txt")

            strHighScore = readHighScore.ReadLine(); 
        }
        catch (Exception e)
        {
                MessageBox.Show(Convert.ToString(e.Message));
        }
...

接下来,我将使用 StreamWriter 插入一个类似的块,并且我对 userScore 大于 strHighScore 的比较似乎没有评估为 true。是因为我的变量超出范围吗?如何在该 try-catch 范围之外读取更改的值,或者就此而言,如何读取带有 StreamReader 的 using 语句(我知道这是首选方法)。

4

2 回答 2

4

我强烈敦促您完全摆脱手动调用Close。改用using语句。StreamReader实际上,如果您使用以下提供的便捷方法,则根本不需要File

string fileName = Path.Combine(path, "WAHS.txt");
string highScoreLine = File.ReadLines(fileName).First();

string beforeSpace = highScoreLine.Split(" ")[0];
int highScore = int.Parse(beforeSpace);

int userScore = int.Parse(txtScore.Text);
if (userScore > highScore)
{
    MessageBox.Show("Congratulations! You set a new high score!", "High Score");
    File.WriteAllText(fileName, userScore.ToString());
}

上述代码抛出的任何异常都应该在堆栈更高的其他地方捕获和处理。

(请注意,您当前的代码只会将现有的高分写回文件,而不是新的。)

如果您确信该文件将包含该行文本,则可以File.ReadAllText改用。

不过,解决您的困惑背后的根本问题可能更重要。你明白为什么readHighScore在你试图关闭它的地方无法访问吗?

于 2012-11-16T17:59:13.987 回答
0

一切都与范围有关

Try-catch创建一个的范围..

例如

try
{
int x=100;
}

catch
{
}
x=55;//you cant access x here

但是,这会工作

int x=0;
try
{
x=100;
}
catch
{
}
x=55;//valid..

因此,FinallyCatch不能访问在Try块内声明的变量。

更多信息在这里

更多一般信息在这里

于 2012-11-16T18:04:18.393 回答