【发布时间】:2013-03-05 20:55:10
【问题描述】:
我正在使用 LINQ 和 HtmlAgilitypack 从 HTML 创建数据表。 以下获取 html 表头并构造数据表列:
var nodes = htmlDoc.DocumentNode.SelectNodes("//table[@class='ps-sellers-table crts']/tr");
nodes[0].Elements("th")
.Skip(0)
.Select(th => th.InnerText
.Trim())
.ToList()
.ForEach(header => dt.Columns.Add(header));
到目前为止,它工作得很好,除了我需要一些定制。
- 选择要添加的列。
- 并指定列类型。
此 select 语句将完成上述两件事:
switch (header)
{
case ("id") : dt.Columns.Add(header,typeof(int)); break;
case ("name") : dt.Columns.Add(header,typeof(string)); break;
case ("price") : dt.Columns.Add(header,typeof(decimal)); break;
case ("shipping") : dt.Columns.Add(header,typeof(decimal)); break;
default : //skip the column and dont add it
}
但是我对 LINQ 和 C# 真的很陌生,我想在第一个 sn-p 的 foreach 中实现上述 switch case,我知道我应该使用ternary operator,但我不确定语法。
【问题讨论】:
-
为什么不写一个使用 switch 块的方法并调用该方法呢?
-
我同意洪流,过度滥用三元运算符会使代码变得混乱且难以阅读。包含逻辑的方法更具可读性(如果公开,则可测试!)。我个人只使用带有布尔值的三元运算符。
-
看起来你在列名和类型之间有一个简单的映射。为什么不直接使用
Dictionary<string,Type>? -
@ThomSmith 可能是因为我还不知道那是什么,因为我还在学习!
标签: c# linq switch-statement ternary-operator