古いMSSQL接続ヘルパーライブラリの1つをリファクタリングしていて、次のエラーが発生しました。
重大度コード説明プロジェクトファイル行エラーCS7036 'ErrorEventArg.ErrorEventArg(string、string)' MSSQLTest C:\ Users\Administrator\Desktop\MSSQLTest\MSSQLTest\MSSQLConnectionの必須の仮パラメーター 'errorMsg'に対応する引数が指定されていません。 CS 61
これはこれまでのところ私のコードです:
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
}
}
このエラーの意味と修正方法を教えてください。私はこのエラーを見たことがありません...
あなたは2つのパラメータを取るコンストラクタを持っています。あなたは次のように書くべきです:
new ErrorEventArg(errorMsv, lastQuery)
コードが減り、読みやすくなります。
[〜#〜]編集[〜#〜]
または、あなたの方法を機能させるために、次のように、パラメータを持たないErrorEventArgのデフォルトのコンストラクタを書いてみることができます:
public ErrorEventArg() {}
のコンストラクタで
public class ErrorEventArg : EventArgs
次のように「ベース」を追加する必要があります。
public ErrorEventArg(string errorMsg, string lastQuery) : base (string errorMsg, string lastQuery)
{
ErrorMsg = errorMsg;
LastQuery = lastQuery;
}
それで解決しました
DailyReportに関する次のLinqステートメントでも同じエラーが発生しました。問題は、DailyReportにデフォルトのコンストラクタがないことでした。どうやら、プロパティを生成する前にオブジェクトをインスタンス化します。
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)
});
コンストラクターに必要なプロパティの1つがパブリックではなかったときに、このエラーが発生しました。これが当てはまる場合は、コンストラクターのすべてのパラメーターがパブリックなプロパティに移動することを確認してください。
ステートメント名前空間someNamespaceの使用
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
}
}