我有一个程序,它在配置文件中定义了各种单位转换,包括应该如何显示的字符串格式。要显示米,厘米等,格式只需要一个输入,但是对于英尺和英寸,需要两个输入(其他单位转换可能需要更多输入)。
我知道运行时从包含输入值的List<>
泛型的长度开始的参数数量。我可以以某种方式将其输入C#String.Format
吗?
通过示例澄清:
因此,在英尺和英寸的情况下,配置中定义的格式可以是"{0} ft. {1} in."
,如果是厘米,则可以是"{0} cm."
。该代码相应地生成一个或两个值,并将它们放在List<float>
通用容器中。然后我需要将代码放入String.Format
语句中,但是String.Format
不会将List<float>
作为参数(据我所知)。
我比C#更了解Python,并且由于它的动态特性,我可以使用星号在列表中解包参数。即my_format.format(*args_list)
其中my_format
是格式字符串。
C#中有类似内容吗?
答案 0 :(得分:5)
格式字符串后面的参数可以作为对象数组提供。
示例:
string format = "{0} feet {1} inches";
object[] parameters = { 4, 2 };
string formatted = String.Format(format, parameters);
答案 1 :(得分:2)
String.Format可以获取一个对象数组,您可以使用yourList.Cast<object>().ToArray()
从List获取一个对象数组。
List<float> a = new List<float>();
a.Add(1.0f);
a.Add(2.0f);
string fmt = "{0} ft. {1} in.";
Console.WriteLine(String.Format(fmt, a.Cast<object>().ToArray()));
或者如果您使用的是.NET 2.0(并且可能有更简洁的方法来执行此操作;我对C#知之甚少):
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static object[] ToObjectArray(List<float> a)
{
object[] b = new object[a.Count];
for (int i = 0; i < (a.Count); i++)
b[i] = (object)a[i];
return b;
}
static void Main(string[] args)
{
List<float> a = new List<float>();
a.Add(1.0f);
a.Add(2.0f);
string fmt = "{0} ft. {1} in.";
Console.WriteLine(String.Format(fmt, ToObjectArray(a)));
Console.ReadLine();
}
}
}
答案 2 :(得分:1)
替代
string format = "{0} feet {1} inches";
string[] parameters = { "4", "2" };
string formatted = format;
for(int i=0; i<parameters.length; i++)
{
//Replaces("{0}", parameters[0]);
//Replaces("{1}", parameters[1]);
formatted = formatted.Replace("{"+i+"}", parameters[i]);
}