是什么导致了“;未分配的局部变量“;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"。

我在这里做错了什么?我该如何修复它?

是什么导致了“;未分配的局部变量“;Razor代码

有机会在被分配之前从读取局部变量时,会导致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>,因为它通常更适应代码更改。(尤其是用作方法签名的一部分时。)

快乐的编码。