是否有方法创建托管类型变量的传递引用列表?

问题描述 投票:0回答:2

情况

我有许多变量,需要对其执行相同的操作。在这种情况下,它们是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语句+空赋值。

例如,这是我想做的:

DreamDataStructure varList = new DreamDataStructure() { MyVar1, MyVar2, ..., MyVar10 };
foreach(ref string MyVar in varList)
{
    if(String.IsNullOrEmpty(MyVar) || "Blank".Equals(MyVar))
        MyVar = null;
}

什么不起作用

1)因为我的变量是strings,所以我不能做这样的事情。

var myListOfVariables = new[] { &MyVar1, &MyVar2, ..., &MyVar10 };

[如果可以的话,我可以按预期的方式将它们设置为foreach。因为string是托管类型,所以不能像这样通过引用传递。

2)同样,如果我只对变量进行List<string>,则它们将按值传递,对我的情况无济于事。

3)这些变量不能包装在外部对象类型中,因为它们需要在旧版应用程序的许多地方用作字符串。假设要更改每个位置的用法将花费很大的精力。

问题

是否有一种通过按引用传递方式遍历string(或其他托管类型)变量的方法,该方法将使我可以将整个操作放入循环中并减少此处发生的代码重复?

情况下,我有许多变量需要执行相同的操作。在这种情况下,它们是字符串,在我们到达此代码时,它们的值可以为null,“”,“ Blank”,或者它们的值是...

c# data-structures pass-by-reference
2个回答
0
投票
static void Main(string[] args)
{
    string str1 = "abc";
    string str2 = null;
    string str3 = "Blank";
    string str4 = "def";
    string str5 = string.Empty;

    Validate(ref str1);
    Validate(ref str2);
    Validate(ref str3);
    Validate(ref str4);
    Validate(ref str5);

    Console.WriteLine("Original Variables:");
    Console.WriteLine(str1 ?? "[null]");
    Console.WriteLine(str2 ?? "[null]");
    Console.WriteLine(str3 ?? "[null]");
    Console.WriteLine(str4 ?? "[null]");
    Console.WriteLine(str5 ?? "[null]");
}

private static void Validate(ref string str)
{
    if (string.IsNullOrEmpty(str) || "Blank".Equals(str))
    {
        str = null;
    }
}

0
投票

字符串是不可变的。即使您可以做您想做的事情,结果也会是:


0
投票

如果我正确理解了您的问题,我认为您想做的事是不可能的。请参阅以下问题:Interesting "params of ref" feature, any workarounds?

© www.soinside.com 2019 - 2024. All rights reserved.