chaps / chapettes、これに関連する質問があることは理解していますが、これは多少異なります-私が見つけることができたすべての関連する質問は、例として1つのパラメーターのみを使用しました. とにかく、要点:
今年は、Delphi で書かれたソース コードを C# に変換しました。これを超えて、私のタスクの範囲は、コード ベースを最適化し、全体的に改善することでした。ソース コードは、ソフトウェア エンジニアリングの原理や手法に関する知識や経験を持たない少数の個人によって書かれているため、一部のコードは不適切です。
とにかく、誰かが私の口論に提案/解決策を提供できるかもしれません:
現在、C# には 9 つの値を格納するためのクラスがあります。
class StoreStruct
{
int A1 { get; set;}
int B1 { get; set;}
int C1 { get; set;}
int A2 { get; set;}
int B2 { get; set;}
int C2 { get; set;}
int A3 { get; set;}
int B3 { get; set;}
int C3 { get; set;}
}
今私が問題を抱えているのは、理想的には、このクラスのプロパティを参照によってメソッドに渡したいということです。しかし、私はこれができないことを知っています。代わりに、ソース コードは一時ローカル変数を作成することで機能し、これらを ref で渡し、クラス プロパティをこれらの値に割り当てます。これは次のように見ることができます。
private void MethodA()
{
var temp = new StoreStruct();
var a1 = 0;
var b1 = 0;
var c1 = 0;
var a2 = 0;
var b2 = 0;
var c2 = 0;
var a3 = 0;
var b3 = 0;
var c3 = 0;
if (expression1)
{
MethodB(ref a1, ref b1, ref c1, 1, 1);
temp.A1 = a1;
temp.B1 = b1;
temp.C1 = c1;
}
if (expression2)
{
MethodB(ref a2, ref b2, ref c2, 2, 2);
temp.A2 = a2;
temp.B2 = b2;
temp.C2 = c2;
}
if (expression3)
{
MethodB(ref a3, ref b3, ref c3, 3, 3);
temp.A3 = a3;
temp.B3 = b3;
temp.C3 = c3;
}
}
private void MethodB(ref int a, ref int b, ref int c, int num1, int num2)
{
a = num1 + num2;
b = num1 - num2;
c = num1 * num2;
}
理想の世界でやりたいこと:
MethodB(ref temp.A1, ref temp.B1, ref temp.C1, 1, 1);
他の投稿を見て、これが C# で対応されていない理由を理解しており、率直に言って、その背後にある理由に同意します。他の投稿でいくつかの回避策といくつかの提案を見てきましたが、これらは 1 つのメソッド呼び出しと 1 つのパラメーターのみが ref によって渡される例にのみ関連しています。一時変数を渡さなくても MethodB のクラス プロパティを更新できるエレガントなソリューションはありますか?