有人可以解释我为什么会这样做:
“使用未分配的局部变量number_of_column”:if(i< number_of_column -1)
处理这个问题的最佳方法是什么?
static void Main(string[] args)
{
int number_of_column;
if (Directory.Exists(path))
{
var file = dir.GetFiles().OrderByDescending(f => f.LastWriteTime).First();
string file1 = file.ToString();
Console.WriteLine(file1);
StreamReader sr = new StreamReader(path + "\\" + file1);
string line;
while ((line = sr.ReadLine()) != null)
{
if (start == true)
{
string[] line1 = line.Split(',');
number_of_column = line1.Count();
i = 0;
foreach (string s in line1)
{
if ((s != "0") || (!string.IsNullOrEmpty(s)))
{
col[i] = "checked";
}
i++;
}
}
else
{
if (line.Contains("Timestamp") && line.Contains("LiveStandby") && line.Contains("peak"))
{
start = true;
}
}
}
sr.Close();
i=0;
foreach (string s in col)
{
if (i < number_of_column -1)
{
答案 0 :(得分:7)
如果您从未进入while循环,则该变量没有指定值。
如果你点击了if中的else分支,那么变量没有赋值。
这些是您收到此错误消息的原因。
您可以通过在声明变量时指定值来解决此问题。
C#要求您在使用之前初始化局部变量。 对于成员变量,这不是必需的,它们会自动分配默认值。
答案 1 :(得分:2)
完全改进了您的代码
file
然后file1
只是多余的,语句可以合并,在语义上更有意义。
if (start == true)
不必要地复杂化,只是if(start)
使用using Statement
可以更好地确保正确使用IDisposable
StreamReader
。
有Path.Combine Method
将两个字符串组合成一个路径。
两个foreach
最好是for
,因为您按顺序迭代数组。
不难发现,只使用number_of_column
来存储数组的迭代计数。
代码:
static void Main(string[] args) {
int number_of_column; // never used
if(Directory.Exists(path)) {
var file1=(
from f in dir.GetFiles()
orderby f.LastWriteTime
select f
).First().ToString();
Console.WriteLine(file1);
using(var sr=new StreamReader(Path.Combine(path, file1)))
for(String line; null!=(line=sr.ReadLine()); ) {
if(start) {
var line1=line.Split(',');
for(var i=0; i<line1.Length; ++i) {
var s=line1[i];
if("0"!=s||!String.IsNullOrEmpty(s))
col[i]="checked";
}
continue;
}
if(
line.Contains("Timestamp")
&&
line.Contains("LiveStandby")
&&
line.Contains("peak"
))
start=true;
}
for(var i=0; i<col.Length; ++i) {
// following lines are no more needed
// if(i<number_of_column-1) {
// }
}
}
}
答案 2 :(得分:0)
尝试将第一行更改为:
static void Main(string[] args){ int number_of_column = 0;if (Directory.Exists(path))
或格式化:
static void Main(string[] args)
{
int number_of_column = 0;
if (Directory.Exists(path)) ...
答案 3 :(得分:0)
这意味着您没有为其分配任何初始值。
替换此
int number_of_column;
使用
int number_of_column = 0;
这将解决您的问题。
答案 4 :(得分:0)
作为一种防止副作用的机制,C#不允许使用未初始化的变量 - 声明的变量,但没有明确设置值。这就是你得到错误的原因。将其初始化为零可以解决问题。