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