c#局部变量
本文关键字:局部变量 | 更新日期: 2023-09-27 18:01:40
谁能解释一下为什么我得到:
"使用未赋值的局部变量number_of_column" for: if (i
最好的处理方法是什么?
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)
{
如果从未进入while循环,则该变量没有赋值。
如果在If中执行else分支,则该变量没有赋值。
这些是你得到这个错误消息的原因。
可以通过在声明变量时赋值来解决这个问题。
c#要求在使用局部变量之前初始化它们。对于成员变量,这是不必要的,它们会自动获得默认值。
完全细化了你的代码
-
file
然后file1
是冗余的,语句可以合并,语义更有意义。 -
if (start == true)
无需复杂,仅if(start)
-
使用
using Statement
将更好地确保IDisposable
像StreamReader
一样正确使用。 -
有
Path.Combine Method
将两个字符串组合成一个路径。 -
两个
foreach
s最好是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) {
// }
}
}
}
尝试将第一行更改为:
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)) ...
这意味着你没有给它赋任何初始值。
替换为
int number_of_column;
int number_of_column = 0;
作为一种防止副作用的机制,c#不允许使用未初始化的变量——已声明但没有显式设置值的变量。这就是你得到错误的原因。将其初始化为0可以解决这个问题。