是什么导致了“;未分配的局部变量“;Razor代码
本文关键字:局部变量 Razor 代码 分配 是什么 | 更新日期: 2023-09-27 18:27:53
我对一些Razor C#代码语法有点问题。
我有一个表单,它的操作是"website.cs.html"。website.cshtml应该接受所有传入的数据,并在
标签中打印出来。
这是我所拥有的:
@{
string names = Request.Form["name"];
string [] arrOfnames; // string array to hold names
if (names != null) { // if the name isn't null, split into the array
arrOfNames = names.Split(',');
}
foreach(string name in names)
{
<p>name</p>
}
}
这导致错误
使用未分配的局部变量"arrOfNames"。
我在这里做错了什么?我该如何修复它?
当有机会在被分配之前从读取局部变量时,会导致C#编译器错误。(我假设代码实际上是for (var name in arrOfNames)
-提示!-或者稍后访问arrOfNames
。)
它(arrOfNames
)必须在上分配所有可能的代码路径(由编译器确定)。
如果names == null
呢?那么arrOfNames
会是什么呢?C#确保您对此是明确的。
一种方法是确保在"备用路径"中分配一个值:
string[] arrOfnames;
if (names != null) {
arrOfNames = names.Split(','); // assigned here
} else {
arrOfNames = new string[0]; // -or- here
}
但是
string[] arrOfnames = null; // assign default. see below.
if (names != null) {
arrOfNames = names.Split(',');
}
或
IEnumerable<string> arrOfNames = names != null
? names.Split(',')
: null; // "alternate path", but single expression. see below.
或
var arrOfNames = (names ?? "").Split(',');
也会起作用。
与null
相比,我建议使用"空集合",因为空的可枚举对象仍然可以迭代,正如后面几行中所发生的那样。另一方面,也许它应该以丑陋可怕的方式死去。。。
此外,考虑使用接口IEnumerable<string>
,因为它通常更适应代码更改。(尤其是用作方法签名的一部分时。)
快乐的编码。