Home > Blockchain >  c# IDE0090 'new' expression can be simplified visual studio 2022
c# IDE0090 'new' expression can be simplified visual studio 2022

Time:05-21

I'm adapting this snmp program from a user here on stackoverflow. I made a new project in Visual studio 2022 added all dependencies.

When I compile I get 6 IDE0090 messages, but I cant see what the problem is. I have set LangVersion to 10.

https://i.stack.imgur.com/BF5P1.jpg

Can anyone see what the problem is?

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using SnmpSharpNet;

namespace Exemple2
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Get an SNMP Object
             */
            SimpleSnmp snmpVerb = new SimpleSnmp("192.168.1.121", 161, "public");
            if (!snmpVerb.Valid)
            {
                Console.WriteLine("Seems that IP or comunauty is not cool");
                return;
            }


            /* Sample of simple Get usage on ifSpeed on interface 10
             * TODO : for sure you have to detect the right interface
             */
            Oid oidifSpeed = new Oid(".1.3.6.1.2.1.2.2.1.5.10");

            /* Getting ifSpeed
             */
            Dictionary<Oid, AsnType> snmpDataS = snmpVerb.Get(SnmpVersion.Ver2, new string[] { oidifSpeed.ToString() });
            if (snmpDataS != null)
                Console.WriteLine("Interface speed \"{0}\" : {1}", oidifSpeed.ToString(), snmpDataS[oidifSpeed].ToString());
            else
                Console.WriteLine("Not Glop!");

            /* Sample of simple Get usage on ifInOctets on interface 10
             * TODO : for sure you have to detect the right interface
             */
            Oid oidifInOctets = new Oid(".1.3.6.1.2.1.2.2.1.10.10");
            Dictionary<Oid, AsnType> snmpData1;

            /* Getting it for the first time
             */
            snmpData1 = snmpVerb.Get(SnmpVersion.Ver2, new string[] { oidifInOctets.ToString() });
            if (snmpData1 != null)
                Console.WriteLine("Number of In octets \"{0}\" : {1}", oidifInOctets.ToString(), snmpData1[oidifInOctets].ToString());
            else
                Console.WriteLine("Not Glop!");

            int missed = 0;
            while (true)
            {
                if (missed == 0)
                {
                    /* When you detect a non refesh data, keep the last one
                     */
                    snmpData1 = snmpVerb.Get(SnmpVersion.Ver2, new string[] { oidifInOctets.ToString() });
                    if (snmpData1 != null)
                        Console.WriteLine("Number of In octets \"{0}\" : {1}", oidifInOctets.ToString(), snmpData1[oidifInOctets].ToString());
                    else
                        Console.WriteLine("Not Glop!");
                }

                /* Some Wait (less aproximative)
                 */
                int duration = 5;
                System.Threading.Thread.Sleep(duration * 1000); // duration seconds

                /* Getting it for the Second time
                 */
                Dictionary<Oid, AsnType> snmpData2 = snmpVerb.Get(SnmpVersion.Ver2, new string[] { oidifInOctets.ToString() });
                if (snmpData2 != null)
                    Console.WriteLine("Number of In octets \"{0}\" : {1}", oidifInOctets.ToString(), snmpData2[oidifInOctets].ToString());
                else
                    Console.WriteLine("Not Glop!");

                Counter32 I1 = new Counter32();
                I1.Set(snmpData1[oidifInOctets]);
                Counter32 I2 = new Counter32();
                I2.Set(snmpData2[oidifInOctets]);
                Counter32 speed = new Counter32();
                speed.Set(snmpDataS[oidifSpeed]);

                if (I2.Value == I1.Value)
                {
                    missed  = 1;
                    continue;
                }
                decimal bandWithUsage = (((decimal)(I2.Value - I1.Value) * 8) * 100) / (speed * duration * (1   missed));
                Console.WriteLine("BandWith usage : {0}%", bandWithUsage);
                missed = 0;
            }
        }
    }
}

CodePudding user response:

As IDE0090 docs shows you can use C# 9 target-typed new expressions and simplify the instance creation. For example from:

SimpleSnmp snmpVerb = new SimpleSnmp("192.168.1.121", 161, "public");
Oid oidifSpeed = new Oid(".1.3.6.1.2.1.2.2.1.5.10");

To:

SimpleSnmp snmpVerb = new("192.168.1.121", 161, "public");
Oid oidifSpeed = new(".1.3.6.1.2.1.2.2.1.5.10");

Or just use var:

var snmpVerb = new SimpleSnmp("192.168.1.121", 161, "public");
var oidifSpeed = new Oid(".1.3.6.1.2.1.2.2.1.5.10");

Note that those are not errors but an informational messages they and do not affect correctness/compilation of the program.

CodePudding user response:

The compliler is suggesting that because you specify the field type explicitly rather than using var snmpVerb = ... , you don't need the constructor name and use this shortened syntax:

SimpleSnmp  snmpVerb = new ("192.168.1.121", 161, "public");

If you right click on the call to the SimnpleSnmp constructor and select Quick Actions and Refactorings it will have some suggestions for you, this being one of them.

  • Related