2

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

List<>我从包含输入值的泛型长度中知道运行时的参数数量。然后我可以以某种方式将其输入 C#String.Format吗?

举例说明:

因此,配置中定义的格式可以是"{0} ft. {1} in."英尺和英寸,也可以"{0} cm."是厘米。代码相应地生成一个或两个值并将它们放入一个List<float>通用容器中。然后我需要将代码放入String.Format语句中,但String.FormatList<float>作为参数(据我所知)。

我比 C# 更了解 Python,并且由于它的动态特性,我可以使用星号将参数解压缩到列表中。即格式字符串my_format.format(*args_list)在哪里。my_format

C#中有类似的东西吗?

4

3 回答 3

5

格式字符串后的参数可以作为对象数组提供。

例子:

string format = "{0} feet {1} inches";
object[] parameters = { 4, 2 };

string formatted = String.Format(format, parameters);
于 2012-10-07T17:54:46.957 回答
2

String.Format 可以获取对象数组,您可以从 List 中获取对象数组yourList.Cast<object>().ToArray()

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();

        }
    }
}
于 2012-10-07T18:45:29.040 回答
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]);
}
于 2012-10-07T18:10:57.280 回答