C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■103269 / )  引数が多いメソッドの引数のクラス化について
□投稿者/ 高橋 (1回)-(2024/08/08(Thu) 08:39:02)

分類:[C#] 

開発環境:Microsoft Visual Studio Professional 2022 (64 ビット) - Current Version 17.8.6
使用言語:C#
フレームワーク:.Net8.0

フォームで種々の情報を入力して、それを別のアプリケーションに取り込ませるためのCSVファイルを作成する処理があります。
また、CSVファイルを作成するのはフォーム1で作る場合もあれば、フォーム2で作る場合もあるためCSVファイルを作成する処理をメソッド化してどちらのフォームからも呼び出しています。
その際、CSVファイルを作成するメソッドの引数が非常に多くなり読みにくいのでクラス化しようと考えております。
これについて2件質問です。

(1)クラス化した場合、パラメーターを定義し忘れるミスをするのですがコンパイル時点で防ぐ方法はないでしょうか。
※クラスのコンストラクタの用意も考えましたが、その引数が多くなり本末転倒だったので断念しました。
※参照する側のnullチェックでミスには気づけるのですができればコンパイル時点で気づきたいです。

(2)内容的には構造体でも十分に見えますがクラスの方がよいのでしょうか。
※ネットで調べた限りはクラス化を紹介しているwebサイトはありましたが、あまり構造体の使用を紹介しているwebサイトは見つかりませんでした。

よろしくお願いいたします。

コードそのまま載せられないので概要になりますが以下のイメージです。

(現状)
【Form1】
private void Button1_Click(object sender, EventArgs e)
{
    MakeCSV(strParam1, strParam2, strParam3, intParam4, intParam5);
}

【Form2】
private void Button2_Click(object sender, EventArgs e)
{
    MakeCSV(strParam1, strParam2, strParam3, intParam4, intParam5);
}

【MakeCSV】
public void MakeCSV(string param1, string param2, string param3, int param4, int param5)
{
//省略
}


(作りたいもの)
【Form1】
private void Button1_Click(object sender, EventArgs e)
{
    CSVParam cSVParam = new();
    cSVParam.StrParam1 = strParam1;
    cSVParam.StrParam2 = strParam2;
    cSVParam.StrParam3 = strParam3;
    cSVParam.IntParam4 = intParam4;
    cSVParam.IntParam5 = intParam5;

    MakeCSV(cSVParam);
}

【Form2】
private void Button2_Click(object sender, EventArgs e)
{
    CSVParam cSVParam = new();
    cSVParam.StrParam1 = strParam1;
    cSVParam.StrParam2 = strParam2;
    cSVParam.StrParam3 = strParam3;
    cSVParam.IntParam4 = intParam4;

//このソースコードではintParam5を代入し忘れている。

    MakeCSV(cSVParam);
}

【MakeCSV】
public void MakeCSV(CSVParam cSVParam)
{
//省略
}

//実際にはUserCodeとかNameとか20件くらい。
public class CSVParam()
{
    string? StrParam1 { get; set;}
    string? StrParam2 { get; set;}
    string? StrParam3 { get; set;}
    int? IntParam4 { get; set;}
    int? IntParam5 { get; set;}
}

返信 編集キー/


管理者用

- Child Tree -