我如何改变参数传递给string.format()函数的方式,取决于参数的多少?

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

目前,我正在尝试写一些东西,从一个txt文件中获取字符串并将它们输入到一个数组中。我以前是通过手动输入并使用内插字符串来实现的,但现在变得不可行了。我需要能够根据函数的结果改变字符串的部分,在任何给定的字符串上,可能有0到任何数量的部分需要改变。我想这在理论上是可行的,但是有 是一个更好的方法。

 public void formatStringInSentencesArray(int numOfArgs, int arrIndexToBeFormatted, UnityAction[] funcsToBePutIn)
    {
        if (numOfArgs == 1)
        {
            conversation[index].sentences[arrIndexToBeFormatted] = string.Format(conversation[index].sentences[arrIndexToBeFormatted], funcsToBePutIn[0]);
        }
    ...
        else if (numOfArgs == 5)
        {
            conversation[index].sentences[arrIndexToBeFormatted] = string.Format(conversation[index].sentences[arrIndexToBeFormatted], funcsToBePutIn[0], funcsToBePutIn[1], funcsToBePutIn[2], funcsToBePutIn[3], funcsToBePutIn[4]);
        }

有什么方法可以让我不只是用一堆ifs和else ifs的方式来完成这个任务?(这都是用C#写的,用于unity游戏)

c# unity3d
1个回答
0
投票

欢迎来到SO.format。

string.format已经支持数组。这是你要找的吗?

var paramArray = new string[] { "a", "b", "c", "d", "e" };
var output = string.Format("{0} {1} {2} {3}", paramArray);

根据你的例子,我可能会把你的函数替换成。

conversation[index].sentences[arrIndexToBeFormatted] = string.Format(conversation[index].sentences[arrIndexToBeFormatted], funcsToBePutIn);

0
投票

通过使用 params 关键字,你可以指定一个方法参数 它可以接受一个可变数量的参数。参数类型必须是一个单维数组。

在一个方法声明中,params关键字之后不允许有额外的参数,一个方法声明中只允许有一个params关键字。

https:/docs.microsoft.comen-usdotnetcsharplanguag-referencekeywordsparams

编译器将处理把这一行Arguments变成一个数组。

汇编器将处理把这行Arguments变成一个数组。String.Format() - 和使用它的函数,如 Console.WriteLine() - 使用params关键字。主函数的行为就像它的行为一样,但是鉴于数据来自操作系统,它有可能没有使用关键字(制作数组是别人的工作)。

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