Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “Stream”是在给定上下文中无效的类型_C# - Fatal编程技术网

C# “Stream”是在给定上下文中无效的类型

C# “Stream”是在给定上下文中无效的类型,c#,C#,我正在尝试编写一个discord bot,其中我需要从另一个文件中检索令牌,但我正在使用的代码引发了一个错误,请参阅title/topic。我的代码是: string TOKEN = ""; using (var Stream = new FileStream((Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).Replace(@"bin\Debug\netcoreapp2.0", @"Data\Token.txt"), F

我正在尝试编写一个discord bot,其中我需要从另一个文件中检索令牌,但我正在使用的代码引发了一个错误,请参阅title/topic。我的代码是:

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();  
}
我确信文件的路径是正确的,所以我不知道是什么导致了这个错误
请让我知道在评论中,如果我应该提供更多的代码

典型的C约定是对局部变量使用camelCase样式的标识符名称,这有助于防止无意中将变量命名为与范围内的某些类型相同的类型

支持使用与另一标识符相同的名称声明变量,那么为什么编译器会感到困惑呢?这是因为您的第一个using语句有一个;,这将该流变量的范围限制为仅using语句。因此,在新的StreamReaderStream表达式中,编译器认为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();  
    }
}

Stream是一个类名,但您正在尝试将其用作变量名。Stream而不是Stream使用小写s我投票以主题外的形式结束,因为:此问题是由无法再复制的问题或简单的印刷错误引起的。。。我不知道,这不是一个真正的打字错误,而是一个特定的编译错误意味着什么。也许这是一个愚弄的问题…问题是不应该有一个;在第一次使用中,感谢您至少提供了解决方案!嗯,我试过这样做,但它返回的名称“stream”在当前上下文中不存在。您是否也在声明变量的位置修复了该变量?它必须在var声明中更改,以及在新StreamReader中的用法…它与变量名无关实际上:D它是;,非常感谢。是的,我想你可以用变量声明来隐藏流类型。不过,这可能不是一个好主意,因为如果您想与其他人共享此代码,当他们看到PascalCase标识符时,他们会假定它是类型或对象成员。更新了答案,因此它实际上是准确的。