我正在尝试编写一个不和谐的bot,在这里我需要从另一个文件中检索令牌,但是我正在使用的代码抛出错误(请参阅标题/主题)。我的代码是这样的:
string TOKEN = "";
using (var Stream = new FileStream((Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).Replace(@"bin\Debug\netcoreapp2.0", @"Data\Token.txt"), FileMode.Open, FileAccess.Read));
using (var ReadToken = new StreamReader(Stream)) {
TOKEN = ReadToken.ReadToEnd();
}
我确定文件在正确的路径中,所以我不知道是什么原因导致了错误
如果我应该提供更多代码,请在评论中让我知道!
答案 0 :(得分:1)
典型的C#约定是对局部变量使用camelCase
样式的标识符名称,这有助于防止您无意中将变量命名为与作用域中的某些类型相同的变量。
支持声明与另一个标识符同名的变量 ,那么为什么编译器会感到困惑?这是因为您的第一个using
语句具有;
,这限制了该Stream
变量的范围为 just using
语句。因此,在new StreamReader(Stream)
表达式中,编译器认为Stream
指的是范围内的Stream
类型,而不是不再知道的变量。
建议的更改:
var token = "";
using (var stream = new FileStream((Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).Replace(@"bin\Debug\netcoreapp2.0", @"Data\Token.txt"), FileMode.Open, FileAccess.Read))
using (var readToken = new StreamReader(stream)) {
token = readToken.ReadToEnd();
}
...或者为使使用范围更容易混淆,您可以显式使用花括号使内容更清晰:
var token = "";
using (var stream = new FileStream((Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).Replace(@"bin\Debug\netcoreapp2.0", @"Data\Token.txt"), FileMode.Open, FileAccess.Read)) {
using (var readToken = new StreamReader(stream)) {
token = readToken.ReadToEnd();
}
}