2

表示方法の文字列形式を含む構成ファイルで定義されたさまざまな単位変換を持つプログラムがあります。メートル、センチメートルなどを表示するには、形式に必要な入力は 1 つだけですが、フィートとインチの場合は 2 つの入力が必要です (他の単位変換にはさらに多くの入力が必要になる可能性があります)。

List<>入力値を含むジェネリックの長さから、実行時の引数の数がわかります。どういうわけかこれを C# に入力できますString.Formatか?

例による明確化:

したがって、構成で定義される形式は"{0} ft. {1} in."、フィートとインチ"{0} cm."の場合、またはセンチメートルの場合です。コードはそれに応じて 1 つまたは 2 つの値を生成し、それらをList<float>汎用コンテナーに入れます。String.Format次に、コードをステートメントに入れる必要がありますが、(私の知る限り)引数としてString.Format取りません。List<float>

Python は C# よりもはるかによく知っており、その動的な性質のおかげで、アスタリスクを使用してリスト内の引数をアンパックできます。つまり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 に答える