• <bdo id='uZWWB'></bdo><ul id='uZWWB'></ul>
  1. <legend id='uZWWB'><style id='uZWWB'><dir id='uZWWB'><q id='uZWWB'></q></dir></style></legend>

    <small id='uZWWB'></small><noframes id='uZWWB'>

    <tfoot id='uZWWB'></tfoot>

  2. <i id='uZWWB'><tr id='uZWWB'><dt id='uZWWB'><q id='uZWWB'><span id='uZWWB'><b id='uZWWB'><form id='uZWWB'><ins id='uZWWB'></ins><ul id='uZWWB'></ul><sub id='uZWWB'></sub></form><legend id='uZWWB'></legend><bdo id='uZWWB'><pre id='uZWWB'><center id='uZWWB'></center></pre></bdo></b><th id='uZWWB'></th></span></q></dt></tr></i><div id='uZWWB'><tfoot id='uZWWB'></tfoot><dl id='uZWWB'><fieldset id='uZWWB'></fieldset></dl></div>

    1. 为什么这个 (null || !TryParse) 条件会导致“使用未分配的局部变量"?

      Why does this (null || !TryParse) conditional result in quot;use of unassigned local variablequot;?(为什么这个 (null || !TryParse) 条件会导致“使用未分配的局部变量?)

    2. <tfoot id='LvFEY'></tfoot>

                <tbody id='LvFEY'></tbody>

              <small id='LvFEY'></small><noframes id='LvFEY'>

              <i id='LvFEY'><tr id='LvFEY'><dt id='LvFEY'><q id='LvFEY'><span id='LvFEY'><b id='LvFEY'><form id='LvFEY'><ins id='LvFEY'></ins><ul id='LvFEY'></ul><sub id='LvFEY'></sub></form><legend id='LvFEY'></legend><bdo id='LvFEY'><pre id='LvFEY'><center id='LvFEY'></center></pre></bdo></b><th id='LvFEY'></th></span></q></dt></tr></i><div id='LvFEY'><tfoot id='LvFEY'></tfoot><dl id='LvFEY'><fieldset id='LvFEY'></fieldset></dl></div>
              • <bdo id='LvFEY'></bdo><ul id='LvFEY'></ul>
                <legend id='LvFEY'><style id='LvFEY'><dir id='LvFEY'><q id='LvFEY'></q></dir></style></legend>
                本文介绍了为什么这个 (null || !TryParse) 条件会导致“使用未分配的局部变量"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                以下代码导致使用未分配的局部变量numberOfGroups":

                int numberOfGroups;
                if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
                {
                    numberOfGroups = 10;
                }
                

                然而,这段代码运行良好(虽然,ReSharper 说 = 10 是多余的):

                However, this code works fine (though, ReSharper says the = 10 is redundant):

                int numberOfGroups = 10;
                if(options.NumberOfGroups == null || !int.TryParse(options.NumberOfGroups, out numberOfGroups))
                {
                    numberOfGroups = 10;
                }
                

                是我遗漏了什么,还是编译器不喜欢我的 ||?

                Am I missing something, or is the compiler not liking my ||?

                我已将其缩小到导致问题的 dynamic (options 是我上面代码中的动态变量).问题仍然存在,为什么我不能这样做?

                I've narrowed this down to dynamic causing the issues (options was a dynamic variable in my above code). The question still remains, why can't I do this?

                这段代码不能编译:

                internal class Program
                {
                    #region Static Methods
                
                    private static void Main(string[] args)
                    {
                        dynamic myString = args[0];
                
                        int myInt;
                        if(myString == null || !int.TryParse(myString, out myInt))
                        {
                            myInt = 10;
                        }
                
                        Console.WriteLine(myInt);
                    }
                
                    #endregion
                }
                

                但是,这段代码确实:

                internal class Program
                {
                    #region Static Methods
                
                    private static void Main(string[] args)
                    {
                        var myString = args[0]; // var would be string
                
                        int myInt;
                        if(myString == null || !int.TryParse(myString, out myInt))
                        {
                            myInt = 10;
                        }
                
                        Console.WriteLine(myInt);
                    }
                
                    #endregion
                }
                

                我没有意识到 dynamic 会是其中的一个因素.

                I didn't realize dynamic would be a factor in this.

                推荐答案

                我很确定这是一个编译器错误.很好的发现!

                I am pretty sure this is a compiler bug. Nice find!

                这不是错误,正如 Quartermeister 所展示的那样;dynamic 可能会实现一个奇怪的 true 运算符,这可能会导致 y 永远不会被初始化.

                it is not a bug, as Quartermeister demonstrates; dynamic might implement a weird true operator which might cause y to never be initialized.

                这是一个最小的复制:

                class Program
                {
                    static bool M(out int x) 
                    { 
                        x = 123; 
                        return true; 
                    }
                    static int N(dynamic d)
                    {
                        int y;
                        if(d || M(out y))
                            y = 10;
                        return y; 
                    }
                }
                

                我认为没有理由认为这是非法的;如果你用 bool 替换 dynamic 它编译就好了.

                I see no reason why that should be illegal; if you replace dynamic with bool it compiles just fine.

                实际上我明天要与 C# 团队会面;我会跟他们提的.为错误道歉!

                I'm actually meeting with the C# team tomorrow; I'll mention it to them. Apologies for the error!

                这篇关于为什么这个 (null || !TryParse) 条件会导致“使用未分配的局部变量"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                Populate ListBox with a IEnumrable on another thread (winforms)(在另一个线程(winforms)上使用 IEnumrable 填充 ListBox)
                listbox selected item give me quot; System.Data.DataRowViewquot; , C# winforms(列表框选择的项目给我quot;System.Data.DataRowView, C# Winforms)
                Cannot remove items from ListBox(无法从列表框中删除项目)
                Preventing ListBox scrolling to top when updated(更新时防止列表框滚动到顶部)
                Drag and drop from list to canvas on windows phone with MVVM(使用 MVVM 在 Windows 手机上从列表拖放到画布)
                Deselection on a WPF listbox with extended selection mode(具有扩展选择模式的 WPF 列表框上的取消选择)
                <legend id='anxA1'><style id='anxA1'><dir id='anxA1'><q id='anxA1'></q></dir></style></legend>
                <tfoot id='anxA1'></tfoot>

                    <bdo id='anxA1'></bdo><ul id='anxA1'></ul>
                    <i id='anxA1'><tr id='anxA1'><dt id='anxA1'><q id='anxA1'><span id='anxA1'><b id='anxA1'><form id='anxA1'><ins id='anxA1'></ins><ul id='anxA1'></ul><sub id='anxA1'></sub></form><legend id='anxA1'></legend><bdo id='anxA1'><pre id='anxA1'><center id='anxA1'></center></pre></bdo></b><th id='anxA1'></th></span></q></dt></tr></i><div id='anxA1'><tfoot id='anxA1'></tfoot><dl id='anxA1'><fieldset id='anxA1'></fieldset></dl></div>

                      1. <small id='anxA1'></small><noframes id='anxA1'>

                          <tbody id='anxA1'></tbody>