【发布时间】:2018-09-30 03:24:08
【问题描述】:
我有这个数据类:
class MyClass
{
Foo Foo1 { get; set; }
Foo Foo2 { get; set; }
Foo Foo3 { get; set; }
Foo Foo4 { get; set; }
}
现在,在我程序的其他地方,我有这个功能:
void ModifyMyClass(MyClass myClassInstance)
{
var rightFooToModify = myclassInstance.Foo1;
rightFooToModify = new Foo(); // Here, my intention is to
// modify MyClass, not just the
// local variable 'rightFooToModify'
}
我需要能够选择 Foo1、Foo2、Foo3、Foo4 之一(取决于某些条件),然后将其设置为新的 Foo 对象。
实现这一目标的最佳方法是什么?我可以在 C# 中使用某种引用变量吗?
编辑:
我可以使用(实际上是我现在使用的):
myClassInstance.Foo1 = new Foo();
但是,ModifyMyClass() 其实要复杂一些,例如:
void ModifyMyClass(MyClass myClassInstance)
{
if (someCondition)
{
var rightFooToModify = myClassInstance.Foo1
// ... Do some computation with rightFooToModify
myClassInstance.Foo1 = new Foo(/* some parameters */);
}
else if (someOtherCondition)
{
// The exact same code as the if above , but with
// myClassInstance.Foo2 instance.
}
}
我想避免在以下所有else if 中重复if 块中的代码。这就是为什么我只想在方法的开头使用var rightFooToModify = myClassInstance.Foo1,而不是在多个ifs 中不必要地复制代码。
【问题讨论】:
-
myclassInstance.Foo1 = new Foo() -
这就是我所做的。我编辑了我的问题以说明我为什么要寻找更好的方法。
-
您为什么不提取一个选择器方法,根据您的条件,只需将正确的
Foo实例提供给您的ModifyMyClass方法。这将节省一些重复。然后,您可以根据代码库的外观进行更多重构(例如,如果所有这些 Foo 实例略有不同,您可以尝试设置类层次结构或使用泛型)。但我想说分离选择器方法是开始。 -
我认为真正的问题(导致重复)更多的是分配部分。即使使用选择器,如果我想分配给实例,无论如何我都必须使用名称
myClassInstance.Foo1 = ...。