我正在尝试以{type}:{number}格式打印出电话号码列表(每个号码为\ n)。所以我会打印出两个数字列表:
Home: 111-111-1111
Cell: 222-222-2222
到目前为止,我可以选择匿名类型但是当我去聚合时,它会在屏幕上打印出整个匿名类型,看起来完全如下:
new { phoneType = Home + ": ", phoneNumber = 111-111-1111 }
我是否应该使用聚合? 这就是我正在使用的:
PhoneNumbers.Select(x => new { phoneType = x.PhoneType, phoneNumber = x.PhoneNumber1 }).Aggregate(
(p, x) => new { phoneType = p.phoneType + ": ", x.phoneNumber });
答案 0 :(得分:4)
如果您只想将电话号码作为字符串,则可以在Select
电话中创建该字符串:
var x = PhoneNumbers.Select(x => string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber));
您的聚合呼叫基本上是一个错误(假设它甚至可以编译),因为您将“当前”电话号码与之前的电话类型相结合。由于现有的字符串方法,将电话号码组合为文本也是不必要的:
var phoneNumberStrings = PhoneNumbers.Select(x => string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber));
var text = string.Join(Environment.NewLine, phoneNumberStrings);
答案 1 :(得分:2)
虽然您可以使用IEnumerable<string>.Aggregate
执行此操作,但如果您只使用string.Join
,我觉得它更清晰。如果他们看到“使用换行符加入这些字符串”,那么阅读代码的人将能够更轻松地获得意义。
string.Join(
Environment.NewLine,
PhoneNumbers.Select(x =>
string.Format("{0}: {1}", x.PhoneType, x.PhoneNumber));