在 C# 中通过引用分配可变字符串数组

Assign a variadic array of strings by reference in C#

我有一个名为 Category 的 class,它采用可变构造函数。参数是字符串。

class Category
{
    string[] definedSets;  // Sets supplied to the constructor

    public Category(params string[] specifiedSets)
    {
        definedSets = specifiedSets;
    }

etc.

对构造函数的调用可能看起来像 Category myCat = new Category(myString1, myString2);

问题是如果 myString1 或 myString2 的内容发生变化,我希望 definedSets 发生变化。我试过 definedSets = ref specifiedSets;,但出现错误 The left hand side of a ref assignment must be a ref variable,我不知道如何解决。

我走的路对吗?我该怎么办?

strings 是不可变的,你不能改变它们的值。每当您分配新值时,它都会分配新内存。不可能每次都引用同一个内存位置。

我建议使用 StringBuilder class 并将 definedSets 的类型更改为 StringBuilder,

public class Category
{
    StringBuilder[] definedSets;  // Sets supplied to the constructor

    public Category(StringBuilder specifiedSets)
    {
        this.definedSets = specifiedSets;
    }
}

Proof of concept: .NET Fiddle

为此,您必须将字符串包装在自定义包装器中 class:

public class StrWrapper
{
    public string Value {get; set;}
    public StrWrapper(string val) => Value = val;
}

您可以传递对象引用并随时更改其中的字符串。

另请注意,您无法保存字符串参考: 因此,即使您可以让 ctor 接受一个 (string ref)[] 数组,您也只能在那里使用它而不存储它。

只需传递一个常规数组即可:

var strings = new[] { myString1, myString2 };
new Category(strings);

然后保留数组并随时更改其元素。