c#中的标签后未分配字符串

我有一个我完全不明白的问题:


在以下代码中,使用了字符串path。路径在标签前面工作,但之后未分配。令我困惑的是,所有其他变量都有效!


代码:


path = @"C:\incidents\jobTransfer";

File.WriteAllLines(path + incident + "\\result_" + incident + ".txt", resultText.ToArray());

End:;

File.WriteAllLines(incident, resultText.ToArray());

File.WriteAllLines(path + incident + "\\result_" + incident + ".txt", resultText.ToArray()); // issue at path in this line

http://img2.mukewang.com/61c6dbfe0001806408660082.jpg

使用未分配的变量...


我可以在标签后重新分配变量,但随后我总是必须编辑 2 行代码以备更改


蝴蝶不菲
浏览 213回答 3
3回答

精慕HU

某处你有:string path;做了string path = null;它可以解决您的问题。尽管已分配null,但该路径并未在标签处未分配。但是,既然我想到了,也许你的意思是:string path = @"C:\incidents\jobTransfer";这样,它从一开始就被分配并具有有效值。看到这个小提琴:例子    string path;    goto End;AnotherLabel:    path = @"C:\incidents\jobTransfer";    Console.WriteLine(path);End:;    // issue at path in this line    Console.WriteLine(path);使固定    string path = null;    goto End;AnotherLabel:    path = @"C:\incidents\jobTransfer";    Console.WriteLine(path);End:;    // no issue at path in this line    Console.WriteLine(path);建议    string path = @"C:\incidents\jobTransfer";    goto End;AnotherLabel:    Console.WriteLine(path);End:;    // no issue at path in this line    Console.WriteLine(path);建议    // don't use labels, due to these kinds of obscurities ;-)

Helenr

问题很可能是您的标签 - 这允许跳转到您的“结束”标签的代码路径,该标签允许不设置“路径”。2个简单的解决方案:重新分配 "path = @"C:\incidents\jobTransfer";" 在“结束”标签之后 - 您提到的是有问题的,因为如果更改,您将有两个地方可以编辑代码。(不过,如果您在某种配置文件中对其进行参数化,则可以更改一次)。将标签放在“path”的原始分配上方并使用一些条件来跳过你的“File.WriteAllLines(path + event + "\result_" + event + ".txt", resultText.ToArray());” 如果它不想要。更好的解决方案是根本不使用标签 - 这些通常是不受欢迎的,而您的问题是众多原因之一;尽管如此,在每个人都因为使用 goto 而跳下喉咙之前,有一些可以说是可以接受的使用它的理由。

守着一只汪

由于您使用的是 Label - 这在 C# 中不常见,此标签上方的范围本质上是一个范围,然后是另一个范围 - 因此声明的变量不再在范围内,因此这就是不再分配它的原因,您需要在标签的使用之外声明这个变量 - 或者根本不使用标签,因为这在 C# 中不是通常的做法
打开App,查看更多内容
随时随地看视频慕课网APP