目前,我正在尝试写一些东西,从一个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游戏)
欢迎来到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);
通过使用 params 关键字,你可以指定一个方法参数 它可以接受一个可变数量的参数。参数类型必须是一个单维数组。
在一个方法声明中,params关键字之后不允许有额外的参数,一个方法声明中只允许有一个params关键字。
https:/docs.microsoft.comen-usdotnetcsharplanguag-referencekeywordsparams
编译器将处理把这一行Arguments变成一个数组。
汇编器将处理把这行Arguments变成一个数组。String.Format()
- 和使用它的函数,如 Console.WriteLine()
- 使用params关键字。主函数的行为就像它的行为一样,但是鉴于数据来自操作系统,它有可能没有使用关键字(制作数组是别人的工作)。