为什么String.IsNullOrEmpty不能编译,而我确实分配了我的var

时间:2015-09-27 00:03:29

标签: c#

更新:我的问题没有正确制定

当我想用String.IsNullOrEmpty测试一个变量时,Visual Studio会抱怨它是未分配的,而我确实分配了它,请看下面的代码?

String IniFileExtension;


if (File.Exists(Path.Combine(fileDirectory, iniFileName)))
{

    // read ini file
    IniFile iniFile = new IniFile(Path.Combine(fileDirectory, iniFileName));
    string outputFileName= iniFile.IniReadValue("Params","outputFile");
    IniFileExtension= iniFile.IniReadValue("Params","fileExtension");
}

if (String.IsNullOrEmpty(MyString)) {}

2 个答案:

答案 0 :(得分:4)

错误是因为本地变量的值不是definitely assigned;因此局部变量不能任何表达式 1 中使用。

它与IsNullOrEmpty无关,可以通过多种形式复制:

string x;
string y = "Hello " + x; // <- invalid, x is not definitely assigned.
bool z = null == x;      // <- invalid, x is not definitely assigned.
"Hello".Equals(x);       // <- invalid, x is not definitely assigned.

有关为何需要这样做的详细信息,请参阅Are C# uninitalized variables dangerous?。大多数相关问题都是关于特定形式的任务分析;但在这里,它从未被分配过。

因此 - 因为代码没有编译 - 它是一个无用的&#39;如图所示构建。

1 Digression:它仍然可以用作out参数。

答案 1 :(得分:1)

不,该方法非常正确并且按预期工作。

可能会为您的变量分配一个值,并在适当的时候变为null

例如

String MyString = "Some String";

//In due course MyString becomes null

if (String.IsNullOrEmpty(MyString)) {}