返回字符串的方法但被指定为字符串[]

时间:2014-02-13 05:35:56

标签: powershell

我有这段代码:

[string]$emailBody = getEmailBody $firstName $emailTemplateFileContent

function getEmailBody($firstName, $emailTemplateFileContent)
{
    $sb = New-Object Text.StringBuilder
    for ($i = 1; $i -lt $emailTemplateFileContent.Length; $i++)
    {
        $sb.AppendLine($emailTemplateFileContent[$i])
    }
    $emailTemplateText = $sb.ToString()
    $emailTemplateTextCustomised = $emailTemplateText.Replace("#name", $firstName)

    return $emailTemplateTextCustomised
}

当我输入$emailTemplateTextCustomised.getType()时,我可以看到它是string

但是当我输入$emailBody.getType()时,我可以看到它是一个数组。

我还可以看到数组有8个字符串,每个字符串包含getEmailBody()的输出。

更新: Powershell似乎真的有些错误,它不再是String[]而只是String,其中getEmailBody()的输出重复8次。

为什么这样做? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

PowerShell没有错误,至少在这种情况下不是这样。 :-)您必须明白,在PowerShell中,函数的“输出”是未捕获到变量的任何内容。执行StringBuilder.AppendLine()的行返回StringBuilder,并将其添加到函数的输出中。试试这个:

function getEmailBody($firstName, $emailTemplateFileContent)
{
    $sb = New-Object Text.StringBuilder
    for ($i = 1; $i -lt $emailTemplateFileContent.Length; $i++)
    {
        $sb.AppendLine($emailTemplateFileContent[$i]) > $null
    }
    $emailTemplateText = $sb.ToString()
    $emailTemplateText.Replace("#name", $firstName)

}

如果你在V3(也许是V2),你也可以使用-replace运算符:

function getEmailBody($firstName, $emailTemplateFileContent)
{
    $sb = New-Object Text.StringBuilder
    for ($i = 1; $i -lt $emailTemplateFileContent.Length; $i++)
    {
        $sb.AppendLine($emailTemplateFileContent[$i]) > $null
    }
    $emailTemplateText = $sb.ToString() -replace '#name',$firstName
    $emailTemplateText 
}