我在使用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/

10-17 02:04