Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# foreach循环中赋值的意外结果-sharpsnmplib_C#_Foreach_Sharp Snmp - Fatal编程技术网

C# foreach循环中赋值的意外结果-sharpsnmplib

C# foreach循环中赋值的意外结果-sharpsnmplib,c#,foreach,sharp-snmp,C#,Foreach,Sharp Snmp,我正在寻找以下问题的解释: 我使用sharpsnmplib与网络上的设备通信。 如果将结果赋给“外部”变量,则Messenger.Walk方法的结果包含零元素;如果将结果赋给方法内部并返回,则该方法具有正确的结果 我觉得我错过了一些非常明显的东西,但我找不到更有趣的是,以下错误代码在200个网络上“有效”,但在特定网络上的某些设备上存在问题。 更新:我忘了:sharpsnmplib的Messenger.Walk将列表作为参数,并将其结果添加到其中。 “不可靠代码”: foreach(devic

我正在寻找以下问题的解释: 我使用sharpsnmplib与网络上的设备通信。 如果将结果赋给“外部”变量,则Messenger.Walk方法的结果包含零元素;如果将结果赋给方法内部并返回,则该方法具有正确的结果

我觉得我错过了一些非常明显的东西,但我找不到更有趣的是,以下错误代码在200个网络上“有效”,但在特定网络上的某些设备上存在问题。

更新:我忘了:sharpsnmplib的Messenger.Walk将列表作为参数,并将其结果添加到其中。

“不可靠代码”:

foreach(devices.ToList()中的变量项)
{
尝试
{
List res=新列表();
方法(项目,res);
logger.Debug(item.ipAddress+“count:”+res.count);
}
捕获(异常er)
{
logger.Info(“SNMP请求错误:+er.Message”);
继续;
}
}
专用静态输入法(设备设备项,列表资源)
{
如果(DeviceItem.deviceType.snmpVersion==1)
{
Messenger.Walk(VersionCode.V1,
新的IPEndPoint(IPAddress.Parse(DeviceItem.IPAddress),161),
新的八进制字符串(Properties.Test.Default.community),
新的目标标识符(“1.3.6.1.2.1.2.2.1.6”),
物件,
14000,
步行模式(WithinSubtree);
}
else if(DeviceItem.deviceType.snmpVersion==2)
{
Messenger.BulkWalk(VersionCode.V2,
新的IPEndPoint(IPAddress.Parse(DeviceItem.IPAddress),161),
新的八进制字符串(Properties.Test.Default.community),
新的目标标识符(“1.3.6.1.2.1.2.2.1.6”),
物件,
14000,
1.
WalkMode.WithinSubtree,
无效的
无效);
}
}
有效的代码:

        foreach (var item in devices.ToList())
        {
            try
            {
                var res = GoodMethod(item);
                logger.Debug(item.ipAddress + " count: " + res.Count);
            }

            catch (Exception er)
            {
                logger.Info("SNMP request error: " + er.Message);
                continue;
            }
        }

        private static List<Variable> GoodMethod(device devicesItem)
        {
            List<Variable> res = new List<Variable>();
            if (devicesItem.deviceType.snmpVersion == 1)
            {
                Messenger.Walk(VersionCode.V1,
                            new IPEndPoint(IPAddress.Parse(devicesItem.ipAddress), 161),
                            new OctetString(Properties.Test.Default.community),
                            new ObjectIdentifier("1.3.6.1.2.1.2.2.1.6"),
                            res,
                            14000,
                            WalkMode.WithinSubtree);
            }
            else if (devicesItem.deviceType.snmpVersion == 2)
            {
                Messenger.BulkWalk(VersionCode.V2,
                                new IPEndPoint(IPAddress.Parse(devicesItem.ipAddress), 161),
                                new OctetString(Properties.Test.Default.community),
                                new ObjectIdentifier("1.3.6.1.2.1.2.2.1.6"),
                                res,
                                14000,
                                1,
                                WalkMode.WithinSubtree,
                                null,
                                null);
            }

            return res;
        }
foreach(devices.ToList()中的变量项)
{
尝试
{
var res=有效方法(项目);
logger.Debug(item.ipAddress+“count:”+res.count);
}
捕获(异常er)
{
logger.Info(“SNMP请求错误:+er.Message”);
继续;
}
}
专用静态列表GoodMethod(设备设备项)
{
List res=新列表();
如果(DeviceItem.deviceType.snmpVersion==1)
{
Messenger.Walk(VersionCode.V1,
新的IPEndPoint(IPAddress.Parse(DeviceItem.IPAddress),161),
新的八进制字符串(Properties.Test.Default.community),
新的目标标识符(“1.3.6.1.2.1.2.2.1.6”),
物件,
14000,
步行模式(WithinSubtree);
}
else if(DeviceItem.deviceType.snmpVersion==2)
{
Messenger.BulkWalk(VersionCode.V2,
新的IPEndPoint(IPAddress.Parse(DeviceItem.IPAddress),161),
新的八进制字符串(Properties.Test.Default.community),
新的目标标识符(“1.3.6.1.2.1.2.2.1.6”),
物件,
14000,
1.
WalkMode.WithinSubtree,
无效的
无效);
}
返回res;
}
        foreach (var item in devices.ToList())
        {
            try
            {
                var res = GoodMethod(item);
                logger.Debug(item.ipAddress + " count: " + res.Count);
            }

            catch (Exception er)
            {
                logger.Info("SNMP request error: " + er.Message);
                continue;
            }
        }

        private static List<Variable> GoodMethod(device devicesItem)
        {
            List<Variable> res = new List<Variable>();
            if (devicesItem.deviceType.snmpVersion == 1)
            {
                Messenger.Walk(VersionCode.V1,
                            new IPEndPoint(IPAddress.Parse(devicesItem.ipAddress), 161),
                            new OctetString(Properties.Test.Default.community),
                            new ObjectIdentifier("1.3.6.1.2.1.2.2.1.6"),
                            res,
                            14000,
                            WalkMode.WithinSubtree);
            }
            else if (devicesItem.deviceType.snmpVersion == 2)
            {
                Messenger.BulkWalk(VersionCode.V2,
                                new IPEndPoint(IPAddress.Parse(devicesItem.ipAddress), 161),
                                new OctetString(Properties.Test.Default.community),
                                new ObjectIdentifier("1.3.6.1.2.1.2.2.1.6"),
                                res,
                                14000,
                                1,
                                WalkMode.WithinSubtree,
                                null,
                                null);
            }

            return res;
        }