【问题标题】:Compiler skipping foreach() loop during compilation?编译器在编译期间跳过 foreach() 循环?
【发布时间】:2014-06-17 08:38:48
【问题描述】:

我创建了一个方法,在该方法中我通过 telnet 配置网络设备。问题是我有多个值,我正在使用 foreach() 循环进行配置,但编译器正在跳过该循环。我正在使用 C# WPF 和模式是MVVM。这是我的代码:

public ObservableCollection<VLANSPropertyClass> vlan { get; set; }

 public bool VLAN()
        {
            vlan = new ObservableCollection<VLANSPropertyClass>();

            string _command;

            _command = "config t \n";
            WriteAPCommand(_command);

            ReadAPCommand();

            foreach(VLANSPropertyClass v in vlan)
            {
                Console.WriteLine("-----------------FOREACH STARTED----------------");
                _command = "vlan " + v.vid + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "name " + v.vname + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "interface " + v.vid + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "ip address " + v.ip + " " + v.mask + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command="exit\r";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "interface " + v.vports + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "switchport access " + v.vid + "\n";
                WriteAPCommand(_command);

                ReadAPCommand();

                _command = "copy runningconfig startupconfig\n";
                WriteAPCommand(_command);

                ReadAPCommand();

            }
            Console.WriteLine("-----------------FOREACH COMPLETED----------------");
            return true;

        }

VLANSProperty 类是:

public class VLANSPropertyClass
    {
        public string vname { get; set; }

        public int S_No { get; set; }

        public string vid { get; set; }

        public string ip { get; set; }

        public string mask { get; set; }

        public string vports { get; set; }
    }

Model 中存在 bool Vlan() 函数,它从 ViewModel 调用。谁能告诉我为什么我的代码没有正确执行。

【问题讨论】:

  • 您正在通过vlan = new ObservableCollection&lt;VLANSPropertyClass&gt;() 创建一个 集合。然后你遍历那个集合。除了零循环周期之外,您还期望什么?

标签: c# wpf mvvm


【解决方案1】:

您正在创建一个新的ObservableCollection&lt;VLANSPropertyClass&gt;(),但它是空的。因此,当您迭代它时,您永远不会进入循环体。您需要在某个地方填充您的集合,然后才能对它进行迭代。 (您可能希望 ReadAPCommand 填充它,但您没有告诉我们任何相关信息。)

想想您希望数据从哪里来,以及您希望它如何进入您的集合。

您还应该仔细考虑您的属性和方法名称 - 目前它们都不遵循正常的 .NET 约定,并且您的 VLAN 方法根本没有描述它的含义做什么

【讨论】:

  • ReadAPCommand() 正在从设备读取数据,其定义如下:
  • public string ReadAPCommand() { _telnetData = new byte[1024]; _recvBytes = _networkstream.Read(_telnetData, 0, _telnetData.Length); _stringData = Encoding.ASCII.GetString(_telnetData, 0, _recvBytes); Console.WriteLine(_stringData); return _stringData; }
  • @CodeSniper:因此,您每次调用ReadAPCommand 时都忽略结果,这本身就非常令人担忧......事实上,您'只是读取当时碰巧可用的任何数据(无论这是否是一个完整的响应),并且可能在 UI 线程中这样做。您希望这些内容如何填充您的收藏?
  • 那么我需要改变什么?
  • @CodeSniper:你似乎没有理解我的意思。您的收藏为空。它没有任何价值。你不会在任何地方填充它。你需要解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多