如何在c#中动态设置字段宽度

时间:2017-09-19 14:08:55

标签: c#

我希望能够动态设置字段宽度,具体取决于字符串长度。

这是我的代码。

static void Main(string[] args)
    {
        string[] names = { "Adam", "Ron", "Carla", "Daniel", "Farla", "Marrietta" };
        decimal[] hours = { 40, 6.667M, 40.39M, 82, 40.333M, 80 };

        var sorted = names.OrderBy(n => n.Length);
        int longest = sorted.LastOrDefault().Length + 1;

        Console.WriteLine($"{"Name", longest} {"Hours",5}\n");
        for(var ctr = 0; ctr < names.Length; ctr++)
        {
            Console.WriteLine($"{names[ctr],longest} {hours[ctr],5:N1}");
        }

    }

我收到的错误是预期的常数值,而不是“最长的。”

2 个答案:

答案 0 :(得分:1)

string.Format()(以及相应的字符串插值)需要这些格式的常量值。

您可以改为使用string.PadLeft()

for(var ctr = 0; ctr < names.Length; ctr++)
{
    Console.WriteLine($"{names[ctr].PadLef(longest)} {hours[ctr],5:N1}");
}

答案 1 :(得分:0)

您的代码失败,因为iterpolation不允许字段宽度表达式中的变量

尝试使用string.PadRight:

(transactions.c.cost_data['subtotal'].astext.cast(sqlalchemy.Float) + transactions.c.cost_data['cost'].astext.cast(sqlalchemy.Float)).label('total_cost')