【问题标题】:C# 6.0 List that is getting syntax Error , ' , 'C# 6.0 列表获取语法错误,','
【发布时间】:2016-03-14 00:23:36
【问题描述】:

我正在解析一个网页,我遇到的问题是 ["www.abc.com/"] 和 ["www.def.com/"] = new List() 出现“语法错误, ',' 预期的。”我做了一个为 HtmlTarget 设置属性的类,public string Id { get; set; } public Action<HtmlElement> Action { get; set; },有人有什么建议吗?

public void Spider(string sURL, HtmlDocument doc, int choice)
{
    var urlTargets = new Dictionary<string, List<HtmlTarget>>
    {
        ["www.abc.com/"] = new List<HtmlTarget>()
        {
            new HtmlTarget
            {
                Id = "search",
                Action = e => e.SetAttribute("value", m_sMfgPartNbr)
            },        
            new HtmlTarget
            {
                Id = "submit",
                Action = e => e.InvokeMember("Click")
            }
        },
        ["www.def.com/"] = new List<HtmlTarget>()        
        {        
            new HtmlTarget        
            {        
                Id = "part",        
                Action = e => e.SetAttribute("value", m_sMfgPartNbr)        
            },        
            new HtmlTarget        
            {        
                Id = "submit",        
                Action = e => e.InvokeMember("Click")        
            }        
        }        
    };

    List<HtmlTargets> targets = null;

    if (urlTargets.TryGetValue(url, out targets))        
    {        
        var inputs = doc.Body.GetElementsByTagName("input");

        foreach (HtmlElement element in inputs)        
        {        
            var id = element.GetAttribute("id");

            foreach(var target in targets)        
            {        
                if (target.Id == id)        
                    target.Action(element);        
            }        
        }        
    }        
}

【问题讨论】:

  • 这不是初始化字典的有效语法 - 请参阅 msdn.microsoft.com/en-us/library/bb531208.aspx。即谷歌'c#初始化字典'
  • @LasseV.Karlsen 我相信语法只从 C# 6.0 开始有效,所以如果 OP 不使用 6.0,那么它将无法工作。
  • 完全正确,这是新的 C# 6.0 语法。
  • @CompressedAir 您是否使用 VS 2015 并针对 4.6 框架?如果没有,您将不得不使用旧语法。
  • 他不必以 4.6 框架为目标,该语法也适用于旧的 .NET 运行时,只要他使用新的编译器来编译它。

标签: c# list dictionary multidimensional-array


【解决方案1】:

C# 6 之前的正确语法是

var urlTargets = new Dictionary<string, List<HtmlTarget>>
 {
    { "www.eciaauthorized.com/search", new List<HtmlTarget>()
           ... 
     },
     { "www.findchips.com/search", new List<HtmlTarget>()
           ...
     } 
}

【讨论】:

  • 问题中的语法也应该没问题,前提是 OP 使用的是 C# 6.0。
  • @LasseV.Karlsen 谢谢,澄清。
猜你喜欢
  • 2015-09-17
  • 2019-01-07
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 2014-03-15
  • 1970-01-01
相关资源
最近更新 更多