chaps/chapettes,我知道有与此相关的问题,但这有些不同 - 我能找到的所有相关问题都只使用一个参数作为示例。无论如何,重点是:
今年,我已经将用 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 将此类的属性传递给方法。但是,我知道我不能这样做。相反,源代码通过创建临时局部变量来工作,通过 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# 不支持这一点,坦率地说,我同意它背后的原因。我在其他帖子中看到了一些解决方法和一些建议,但这些仅与一个方法调用的示例有关,并且只有一个参数由 ref 传递。有没有人有一个优雅的解决方案,可以让我更新 MethodB 中的类属性而无需传递临时变量?