C# C中全局赋值字符串变量的问题#

C# C中全局赋值字符串变量的问题#,c#,string,winforms,global-variables,C#,String,Winforms,Global Variables,请参见下面的C#代码 我已全局初始化字符串文件名,并初始化if else块内的值,并尝试在块外检索相同的值。我得到以下生成错误。你能解释一下为什么吗 未分配局部变量文件名的使用不会自动初始化局部变量。 使用 您需要正确初始化变量:string file\u name=null,因为编译器必须保证有保证的初始化,在您的情况下,如果条件失败,则不保证有保证的初始化。将其更改为string file\u name=string.Empty字符串文件_name=“”;旁注:我怀疑你使用“全球”的方式很不

请参见下面的C#代码

我已全局初始化字符串
文件名
,并初始化
if else
块内的值,并尝试在块外检索相同的值。我得到以下
生成错误
。你能解释一下为什么吗


未分配局部变量文件名的使用不会自动初始化局部变量。
使用


您需要正确初始化变量:
string file\u name=null
,因为编译器必须保证有保证的初始化,在您的情况下,如果条件失败,则不保证有保证的初始化。将其更改为
string file\u name=string.Empty字符串文件_name=“”;旁注:我怀疑你使用“全球”的方式很不寻常。。。在大多数情况下,这个词用于描述类级变量(字段)实例或静态。。。代码示例似乎显示了正则局部变量。。。试着阅读一本C#书籍/文章,在提问时使用更多的标准单词。此外,当你在顶部声明文件名时,你在if语句中给它一个值。因此,当您调用MessageBox.Show时,它可能已经初始化,也可能没有初始化,这就是编译器抱怨的原因。
 string file_name;

 if (Directory.GetFiles(targetPath, "*.xls").Length != 0)
        {
                var directory = new DirectoryInfo(@"C:\Users\INTEL_ADMIN\Downloads\SubDir");
                var myFile = (from f in directory.GetFiles()
                          orderby f.LastWriteTime descending
                          select f).First();


                file_name = myFile.Name;
        }

 MessageBox.Show(file_name);
string file_name = string.Empty;