【问题标题】:How to use output parameter with StringBuilder?如何在 StringBuilder 中使用输出参数?
【发布时间】:2017-11-14 05:27:13
【问题描述】:

我将一个 stringbuild 输出变量传递给函数,哪个参数类型是 out stringbuild,但编译器 tel me

"在离开函数之前,必须给 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 声望才能发布图片

【问题讨论】:

  • 问题是您不需要首先发布图像,而是应该发布代码......

标签: c# wpf out


【解决方案1】:

[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();
}

【讨论】:

    【解决方案2】:

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

    您可以查看here 了解 StringBuilder 类支持的构造函数参数的类型。

    这应该可行:

    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);
    }
    

    您还必须从 FuncOutParamString 函数返回 sbValue 变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多