C#如何使用String.Format处理数量未知的动态参数实现字符串拼接
原生的String.Format不支持你提到的{2-11}这类范围占位符语法,你可以选择以下两种成熟方案实现需求:
方案1:先拼接动态部分再传入Format(最常用,易维护)
先把可变的爱好列表拼接为单个字符串,再作为普通参数传入String.Format即可:
// hobbies是用户输入的动态列表,长度1~10都可以自适应 var hobbies = new string[] { "Swimming", "Dancing", "Singing", "Doing nothing" }; // 用指定分隔符拼接所有爱好 var joinedHobbies = string.Join(", ", hobbies); var text = "Name: {0}, LastName: {1}, Hobbies: {2}"; var result = string.Format(text, "John", "Dohn", joinedHobbies); Console.WriteLine(result);
输出结果完全符合预期:Name: John, LastName: Dohn, Hobbies: Swimming, Dancing, Singing, Doing nothing
方案2:单次String.Format调用实现(符合你要的可变参数需求)
如果你一定要用单次Format调用处理所有参数,可以手动拼接占位符,利用String.Format支持传入object[]参数的特性实现:
// 所有参数合并为一个数组 var allParams = new object[] { "John", "Dohn", "Swimming", "Dancing", "Singing", "Doing nothing" }; // 动态生成后续爱好对应的占位符 var hobbyPlaceholders = string.Join(", ", Enumerable.Range(2, allParams.Length - 2).Select(i => $"{{{i}}}")); var text = $"Name: {{0}}, LastName: {{1}}, Hobbies: {hobbyPlaceholders}"; var result = string.Format(text, allParams); Console.WriteLine(result);
这种方案不需要提前拼接爱好字符串,仅调用一次String.Format就能完成所有参数的填充,适合占位符规则更复杂的场景。
内容的提问来源于stack exchange,提问作者Skylin R
相关产品推荐
相关产品推荐

