Er is geen argument gegeven dat overeenkomt met de vereiste formele parameter – .NET Error

Ik ben een van mijn oude MSSQL Connection-helperbibliotheek aan het herstructureren en ik kreeg de volgende foutmelding:

Fout CS7036 Er is geen
gegeven argument dat overeenkomt met de vereiste formele parameter
‘errorMsg’ van ‘ErrorEventArg.ErrorEventArg(string,
string)’ MSSQLTest C:\Users\Administrator\Desktop\MSSQLTest\MSSQLTest\MSSQLConnection.cs 61

Dit is mijn code tot nu toe:

MSSQLConnection.cs

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Threading;
namespace MSSQLTest
{
    public class ErrorEventArg : EventArgs
    {
        public string ErrorMsg { get; set; }
        public string LastQuery { get; set; }
        public ErrorEventArg(string errorMsg, string lastQuery)
        {
            ErrorMsg = errorMsg;
            LastQuery = lastQuery;
        }
    }
    public class MSSQLConnection
    {
        /// <summary>
        /// Private class objects.
        /// </summary>
        private SqlConnection sqlConnection;
        private int sqlCommandTimeout;
        private string lastQuery = string.Empty;
        /// <summary>
        /// Public event related objects & handler.
        /// </summary>
        public event ErrorHandler OnError;
        public delegate void ErrorHandler(MSSQLConnection sender, ErrorEventArg e);
        /// <summary>
        /// Class constructor.
        /// </summary>
        /// <param name="sqlConnection"></param>
        /// <param name="sqlCommandTimeout"></param>
        public MSSQLConnection(SqlConnection sqlConnection, Int32 sqlCommandTimeout = 120)
        {
            if (null == sqlConnection)
                throw new Exception("Invalid MSSQL Database Conection Handle");
            if (sqlConnection.State != System.Data.ConnectionState.Open)
                throw new Exception("MSSQL Database Connection Is Not Open");
            this.sqlConnection = sqlConnection;
            this.sqlCommandTimeout = sqlCommandTimeout;
        }
        /// <summary>
        /// Helper method to emit a database error to event subscribers.
        /// </summary>
        /// <param name="errorMsg"></param>
        internal void EmitError(String errorMsg)
        {
            var errorDelegate = OnError;
            if (errorDelegate != null)
            {
                errorDelegate(this, new ErrorEventArg() // Line #61
                {
                    ErrorMsg = errorMsg,
                    LastQuery = lastQuery
                });
            }
        }
        /// rest of the code snipped
    }
}

Wat betekent deze fout & hoe repareer ik het? Ik heb deze fout nog niet eerder gezien…


Antwoord 1, autoriteit 100%

Je hebt een constructor die 2 parameters nodig heeft. Je zou zoiets moeten schrijven als:

new ErrorEventArg(errorMsv, lastQuery)

Het is minder code en gemakkelijker te lezen.

BEWERKEN

Of, om uw weg naar het werk te krijgen, kunt u proberen een standaardconstructor voor ErrorEventArg te schrijven die geen parameters zou hebben, zoals deze:

public ErrorEventArg() {}

Antwoord 2, autoriteit 98%

In de constructor van

public class ErrorEventArg : EventArgs

je moet “base” als volgt toevoegen:

public ErrorEventArg(string errorMsg, string lastQuery) : base (string errorMsg, string lastQuery)
{
    ErrorMsg = errorMsg;
    LastQuery = lastQuery;
}

Antwoord 3, autoriteit 44%

Ik kreeg dezelfde fout, maar dit kwam doordat ik geen standaardconstructor had gemaakt. Als je dat nog niet hebt geprobeerd, maak dan de standaardconstructor als volgt aan:

public TestClass()
{
}

Antwoord 4, autoriteit 12%

Ik kreeg dezelfde fout in de volgende Linq-verklaring met betrekking tot DailyReport. Het probleem was dat DailyReport geen standaardconstructor had. Blijkbaar wordt het object geïnstantieerd voordat de eigenschappen worden ingevuld.

var sums = reports
    .GroupBy(r => r.CountryRegion)
    .Select(cr => new DailyReport
    {
        CountryRegion = cr.Key,
        ProvinceState = "All",
        RecordDate = cr.First().RecordDate,
        Confirmed = cr.Sum(c => c.Confirmed),
        Recovered = cr.Sum(c => c.Recovered),
        Deaths = cr.Sum(c => c.Deaths)
    });

Antwoord 5, autoriteit 6%

Ik kreeg deze foutmelding toen een van mijn eigenschappen die vereist was voor de constructor niet openbaar was. Zorg ervoor dat alle parameters in de constructor naar eigenschappen gaan die openbaar zijn als dit het geval is:

statements gebruiken
naamruimte een naamruimte

public class ExampleClass {
  //Properties - one is not visible to the class calling the constructor
  public string Property1 { get; set; }
  string Property2 { get; set; }
   //Constructor
   public ExampleClass(string property1, string property2)
  {
     this.Property1 = property1;
     this.Property2 = property2;  //this caused that error for me
  }
}

Antwoord 6

public ErrorEventArg(string errorMsg, string lastQuery)
    : base (errorMsg, lastQuery)
{
    ErrorMsg = errorMsg;
    LastQuery = lastQuery;
}

om de basisconstructor aan te roepen, moeten de parameters van de subklasse en de basisklasse hetzelfde zijn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes