【发布时间】:2020-04-13 17:57:26
【问题描述】:
编辑;根据回复,我可能不清楚我的最终目标。我已经更新了最后一节。
情况
我有许多变量需要对它们执行相同的操作。在这种情况下,它们是strings,并且在我们到达此代码时可以具有值null、""、"Blank",或者它们可能已经具有我想要保留的分配的其他值。
if (String.IsNullOrEmpty(MyVar1) || "Blank".Equals(MyVar1))
MyVar1 = null;
if(String.IsNullOrEmpty(MyVar2) || "Blank".Equals(MyVar2))
MyVar2 = null;
...
if(String.IsNullOrEmpty(MyVar10) || "Blank".Equals(MyVar10))
MyVar10 = null;
作为一个想要保持我的代码干净的程序员,这个块让我发疯,我正在寻找一种方法来创建这些变量的列表,并对每个变量执行相同的 if 语句 + 空赋值。
例如,这是我想做的:
MyVar1 = "Blank";
DreamDataStructure varList = new DreamDataStructure() { MyVar1, MyVar2, ..., MyVar10 };
foreach(ref string MyVar in varList)
{
if(String.IsNullOrEmpty(MyVar) || "Blank".Equals(MyVar))
MyVar = null;
}
Console.WriteLine(MyVar1); //Should now be null
什么不起作用
1) 因为我的变量是strings,所以我不能这样做。
var myListOfVariables = new[] { &MyVar1, &MyVar2, ..., &MyVar10 };
如果可以,我可以按预期通过foreach 处理它们。因为string 是托管类型,所以不能像这样通过引用传递。
2) 同样,如果我只是为变量创建了一个List<string>,它们将按值传递,对我的情况没有帮助。
3) 这些变量不能包装在外部对象类型中,因为它们需要在遗留应用程序的很多地方用作字符串。假设要更改它们在每个位置的使用方式将付出很大的努力。
问题
有没有办法以传递引用的方式迭代string(或其他托管类型)变量,这将允许我将整个操作放入循环中并减少此处发生的代码重复?
这里的目标是我可以稍后在我的代码中使用 原始变量 来更新值。 MyVar1 等稍后已被旧代码引用,这些代码期望它们为 null 或具有实际值。
【问题讨论】:
-
“这些变量不能包装在外部对象类型中,因为它们需要在遗留应用程序的很多地方用作字符串。”您接受 just 用于此目的的外部对象类型,其中外部对象类型设置变量?
-
-
现在我明白你想要做什么了。
DreamDataStructure看起来这些已经是类的属性,但它们不是。它们只是变量。如果您修改代码以使这些变量成为类的属性,这将变得很容易。但是,如果你不能——你所拥有的只是个别变量并且你被困住了——那么你一次只能修改一个。没有别的办法。
标签: c# data-structures pass-by-reference