如何使用 StringBuilder 的输出参数?

How to use output parameter with StringBuilder?

我将一个 stringbuild out 变量传递给参数类型为 out stringbuild 的函数,但编译器告诉我

"Before leave function, You must assign value to sbValue"

    public void FuncOutParamString(out StringBuilder sbValue)
    {
        sbValue.Append("wold!");
    }

    private void btnOutParam_Click(object sender, RoutedEventArgs e)
    {
        Console.WriteLine("=================== Out Parameter ===================");
        // Declare a variable but don't assign a value to it ******************************
        int y = 0;

        // Pass it in as an output parameter, even though its value is unassigned
        FuncOutParamInt(out y);

        // It's now assigned a value, so we can write it out:
        Console.WriteLine(y);

        // Declare a variable but don't assign a value to it ******************************
        StringBuilder sb = new StringBuilder();
        sb.Append("Hello ");
        FuncOutParamString(out sb);

        Console.WriteLine(sb);
    }

抱歉,我需要 10 个声望才能 post 图片

当将变量 sb 声明为 StringBuilder 时,您必须将一个值传递给构造函数,否则它将被初始化为 null。由于它需要从堆中分配内存,因此需要一个参数以便稍后使用追加。

您可以检查 here 构造函数参数 StringBuilder class 支持的类型。

这应该有效:

public void FuncOutParamString(StringBuilder sbValue)
{
    sbValue.Append("wold!");
    return sbValue;
}

private void btnOutParam_Click(object sender, RoutedEventArgs e)
{
    Console.WriteLine("=================== Out Parameter ===================");
    // Declare a variable but don't assign a value to it ******************************
    int y = 0;

    // Pass it in as an output parameter, even though its value is unassigned
    FuncOutParamInt(out y);

    // It's now assigned a value, so we can write it out:
    Console.WriteLine(y);

    // Declare a variable but don't assign a value to it ******************************
    StringBuilder sb = new StringBuilder(50);
    sb.Append("Hello ");
    sb = FuncOutParamString(sb);

    Console.WriteLine(sb);
}

您还必须 return 来自 FuncOutParamString 函数的 sbValue 变量。

[out]表示待创建。 [class] 是引用类型。

public void FuncOutParamString(StringBuilder sbValue)
{
    sbValue.Append("wold!");
}

public void FuncOutParamStringRef(ref StringBuilder sbValue)
{
    //if(...)
        sbValue = new StringBuilder();
}

public void FuncOutParamStringOut(out StringBuilder sbValue)
{
    sbValue = new StringBuilder();
}