我在使用Razor C#代码语法时遇到了一些问题。
我有一个表单,其 Action 为“website.cshtml”。 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>
}
}
这导致错误
我在这里做错了什么,如何解决?
最佳答案
如果有机会在分配局部变量之前读取该局部变量,则会导致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>
接口(interface),因为它通常更适合代码更改。 (特别是用作方法签名的一部分时。)快乐的编码。
关于c# - 是什么导致Razor代码中的 “unassigned local variable”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9693266/