以编程方式将变量插入string.format(C#)

以编程方式将变量插入string.format(C#),c#,C#,想象一下,我将以下变量设置为string.format: string foo = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}"); Format方法的占位符将比这多得多(准确地说是64个占位符),并且根据某些条件,占位符可能会更改。因此,我想知道是否有一种方法可以循环遍历我拥有的变量列表,然后将这些变量相应地插入到format方法中。我甚至不知道如何启动它,如果可能的话,但我肯定不需要手动将64个变量插入format方法中?是的,可能

想象一下,我将以下变量设置为string.format:

string foo = string.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8}");

Format方法的占位符将比这多得多(准确地说是64个占位符),并且根据某些条件,占位符可能会更改。因此,我想知道是否有一种方法可以循环遍历我拥有的变量列表,然后将这些变量相应地插入到format方法中。我甚至不知道如何启动它,如果可能的话,但我肯定不需要手动将64个变量插入format方法中?

是的,可能。您可以使用
params
关键字创建参数数量未指定的函数。大概是这样的:

void myFunction(params object[] parameters)
{
    foreach (var x in parameters) ...

}

有一个超负荷的
String.Format
接受
params对象[]
参数:

public static string Format (string format, params object[] args);
这意味着您可以传递任意数量的任意类型的对象。但是,您有责任确保传递的参数数量与字符串中占位符的数量相匹配。例如:

DateTime date = DateTime.Today;
int number = 1234;
string format1 = "{0} == {1}";

string formatted = Format(format1, date, number);
// OR
object[] values = new object[] { date, number };
string formatted = Format(format1, values);

private static string Format(string text, params object[] values)
{
    return string.Format(format1, values);
}

获取一个列表,按您想要的顺序排序-然后

var l = new List<string>();
// add to l, in the order you want then - 
// when adding convert to the string equivalent if it's not a string already.
var s = string.Join("|",l);
return s;
var l=新列表();
//按你想要的顺序添加到l,然后-
//将转换添加到字符串等效项(如果它不是字符串)时。
var s=string.Join(“|”,l);
返回s;

如何将这些参数插入string.Format方法如果您能在回答中更清楚地说明这一点,以便我可以在三个参数之后将问题标记为已接受,
string.Format
将使用接受对象数组的重载(用
params
关键字声明)。所以只需将所有变量粘贴在
对象[]
中并传递即可。请将所有变量粘贴在对象数组中并传递<代码>变量args=新对象[]{var1,var2,…};格式(“…”,参数)如果格式字符串中有64个占位符,则需要传递64个变量。如果您直接在string.Format调用中写入它们,或者如果您构建了一个包含64个变量的数组,我看不出它们的区别在哪里。您的意思是加入一个变量列表
string foo=string.join(“|”,list)?如果
args
的长度不同于
格式
字符串中的占位符数,则此操作无效。事实上,如果
args
@Enigmativity中没有足够的元素,这将导致异常,这就是为什么在回答中免责声明“但是,您有责任确保传递的参数数量与字符串中的占位符数量匹配:”)这不是我的意思,“|”老实说,我想我没有这样做——你可以只做var s=string.Join(“,l”);