C# 未赋值局部变量“\u tr”的使用

C# 未赋值局部变量“\u tr”的使用,c#,windows,try-catch,C#,Windows,Try Catch,错误发生在底线处。我不知道如何解决这个问题,逻辑上似乎一切正常,但我需要找到一种方法让编译器看到这一点。在使用它之前,您必须分配_tr的值。如果你想从一个没有水的接受者那里喝水,那么你就什么都不喝,是吗 在代码的try部分,它不能保证它将获得_tr的值,因此您必须在使用它之前自己初始化变量,至少使用null。在声明时将_tr设置为null。编译器发现它可能尚未初始化。至少在使用对象之前,需要为其指定null: bool _Error = false; ThesResult _tr; try {

错误发生在底线处。我不知道如何解决这个问题,逻辑上似乎一切正常,但我需要找到一种方法让编译器看到这一点。

在使用它之前,您必须分配_tr的值。如果你想从一个没有水的接受者那里喝水,那么你就什么都不喝,是吗

在代码的try部分,它不能保证它将获得_tr的值,因此您必须在使用它之前自己初始化变量,至少使用null。

在声明时将_tr设置为null。编译器发现它可能尚未初始化。

至少在使用对象之前,需要为其指定null:

bool _Error = false;
ThesResult _tr;
try { _tr = engine["en"].LookupSynonyms(_Word, true); }
catch (Exception)
{
    _Error = true;
}
if (_Error)
{
    _Synonyms.Add(word);
}
else
{
     List<string> SynonymNew = new List<string>();
     foreach (ThesMeaning meaning in _tr.Meanings)

初始化集合时_tr=null

 bool _Error = false;
 ThesResult _tr = null;
 try { _tr = engine["en"].LookupSynonyms(_Word, true); }
 catch (Exception)
       {
          _Error = true;
       }
       if (_Error)
       {
           _Synonyms.Add(word);
       }
       else
         {
                    List<string> SynonymNew = new List<string>();
                    foreach (ThesMeaning meaning in _tr.Meanings)

C要求在尝试使用某个变量之前,必须保证该变量已被赋值。在这种情况下,如果lookupsynoyms方法抛出异常,那么_tr将永远不会得到值,甚至不会为null

因此,除非您能够保证在使用变量之前,至少为该变量指定了null值,否则它将不允许编译


这与其他一些语言VB不同,VB会自动将变量初始化为其默认值,如null或零或其他任何值,或者其他语言C++,变量开始时是垃圾,无论发生在那个内存地址。

< p>我会说,也许你可能想重新思考你的操作顺序。尝试catch set标志ifflag接近反模式。这样做有几个很好的理由:

这不是编写代码的最清晰的方式 你没有这样分配额外的内存 您使用的变量少了一个,我猜_Error没有在其他地方使用

ThesResult _tr = null;
bool _Error = false;
// ThesResult _tr; <!-- only needed in the try block.
try { 
    ThesResult _tr = engine["en"].LookupSynonyms(_Word, true); 
    List<string> SynonymNew = new List<string>();
    // no worries about initializing it to null.
    foreach (ThesMeaning meaning in _tr.Meanings)
    // your loop and the rest of the function.
}
catch (Exception)
{
    _Synonyms.Add(word); // is this supposed to be _Word?
}