我是新来的,我尝试查看旧问题,但我也是c#的新手,我发现很难解决下面的问题:
if (File.Exists(@"C:\ESC\Impostazioni.txt"))
{
TextReader lettore_file = new StreamReader(@"C:\ESC\Impostazioni.txt");
String opzioni = lettore_file.ReadLine();
int i;
for (i = 0; i < opzioni.Length; i++) <----here, indicating "i=0"
{
if (opzioni[i] == '-')
{
char[] coloregenerale = new char[i];
for (int j = 0; j < i; j++)
coloregenerale[j] = opzioni[j];
break;
答案 0 :(得分:6)
在尝试循环遍历每个字符之前,您应该检查字符串值是null还是空,如下所示:
if(!String.IsNullOrEmpty(opzioni))
{
// Put loop through character logic here
}
答案 1 :(得分:3)
您需要进行调试,并在致电opzioni
String opzioni = lettore_file.ReadLine();
字符串是否为空引用
另外,你应该在for循环中声明我,而不是在它之前声明,如下所示。
for (int i = 0; i < opzioni.Length; i++)
答案 2 :(得分:1)
该代码中有几个错误:
您错过了using
statement。
您没有查看StreamReader.ReadLine
的结果。
看起来你正在重新实现string.Substring
。
样品:
if (File.Exists(@"C:\ESC\Impostazioni.txt"))
{
using (var letterFile = new StreamReader(@"C:\ESC\Impostazioni.txt"))
{
var opzioni = letterFile.ReadLine();
if(string.IsNullOrWhiteSpace(opzioni))
{
// end of file
}
var dashIndex = opzioni.IndexOf("-");
string coloregenerale = dashIndex > -1
? opzioni.Substring(0, dashIndex)
: opzioni;
}
}
答案 3 :(得分:0)
如果在指定的行上发生了空引用异常,则罪魁祸首可能是opzioni变量。如果之前对lettore_file.ReadLine()的调用返回null,则当您尝试在for循环中获取它的长度时,opzioni将为null。这将抛出您遇到的异常。解决方案是在进入循环
之前检查该变量是否为null答案 4 :(得分:0)
opzioni可能在该特定索引上有null
值,使用IsNullorEmpty
条件更好地处理该行内部
char[] coloregenerale = new char[i];
for (int j = 0; j < i; j++)
{
if( String.IsNullOrEmpty(opzioni[j] == false ) // This is mandatory check at this place
coloregenerale[j] = opzioni[j];
}