更新:我的问题没有正确制定
当我想用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)) {}
答案 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)) {}