我希望能够根据字符串长度动态设置字段宽度。
这是我的代码。
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}");
}
}
我收到一个错误,认为常量值是“而不是”最长的。
string.Format()
(以及相应的字符串插值)需要这些格式的常量值。
string.PadLeft()
代替:
for(var ctr = 0; ctr < names.Length; ctr++)
{
Console.WriteLine($"{names[ctr].PadLef(longest)} {hours[ctr],5:N1}");
}
您的代码失败,因为迭代不允许在字段宽度表达式中使用变量
尝试使用 string.PadRight 代替:
static void Main(string[] args)
{
string[] names = new string[] { "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++)
{
string msg = String.Format("{0} {1,5:N1}", names[ctr].PadRight(longest), hours[ctr]);
Console.WriteLine(msg);
}
}
您可以使用“string.Format()”;例如输出两个数字 - '99' 和 '100' 作为 4 个字符的宽度(- 带前导/左侧空格填充):
void Main()
{
int num;
var charWidth = 4;
var fmtStr = $"'{{0,{charWidth}}}'";
//
num = 99;
Console.WriteLine(string.Format(fmtStr, num));
//
num = 100;
Console.WriteLine(string.Format(fmtStr, num));
}
输出:
' 99'
' 100'