我可以使用C#字符串格式和运行时决定的输入数量吗?

时间:2012-10-07 17:47:14

标签: c# format string-formatting

我有一个程序,它在配置文件中定义了各种单位转换,包括应该如何显示的字符串格式。要显示米,厘米等,格式只需要一个输入,但是对于英尺和英寸,需要两个输入(其他单位转换可能需要更多输入)。

我知道运行时从包含输入值的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#中有类似内容吗?

3 个答案:

答案 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]);
}