【发布时间】:2011-04-16 05:32:53
【问题描述】:
这个类正在抛出异常。它没有显示确切的行号,但听起来它发生在静态构造函数中:
static class _selectors
{
public static string[] order = new[] { "ID", "NAME", "TAG" };
public static Dictionary<string, Regex> match = new Dictionary<string, Regex> {
{ "ID", new Regex(@"#((?:[\w\u00c0-\uFFFF-]|\\.)+)") },
{ "CLASS", new Regex(@"\.((?:[\w\u00c0-\uFFFF-]|\\.)+)") },
{ "NAME", new Regex(@"\[name=['""]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['""]*\]") },
{ "ATTR", new Regex(@"\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['""]*)(.*?)\3|)\s*\]") },
{ "TAG", new Regex(@"^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)") },
{ "CHILD", new Regex(@":(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?") },
{ "POS", new Regex(@":(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)") },
{ "PSEUDO", new Regex(@":((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['""]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?") }
};
public static Dictionary<string, Action<HashSet<XmlNode>, string>> relative = new Dictionary<string, Action<HashSet<XmlNode>, string>> {
{ "+", (checkSet, part) => {
}}
};
public static Dictionary<string, Regex> leftMatch = new Dictionary<string, Regex>();
public static Regex origPOS = match["POS"];
static _selectors()
{
foreach (var type in match.Keys)
{
_selectors.match[type] = new Regex(match[type].ToString() + @"(?![^\[]*\])(?![^\(]*\))");
_selectors.leftMatch[type] = new Regex(@"(^(?:.|\r|\n)*?)" + Regex.Replace(match[type].ToString(), @"\\(\d+)", (m) =>
@"\" + (m.Index + 1)));
}
}
}
为什么我不能更改 c'tor 中的这些值?
【问题讨论】:
-
另外一个建议……请关注design guidelines for .NET。它可能看起来很挑剔,但是驼峰式公共字段,以下划线开头的类......对于任何 .NET 开发人员来说,它看起来就像一团糟,并且会在他们眼中对你产生不良影响。
-
我很难理解回调和其他东西,你能解释一下代码中以下行的作用:public static Dictionary
, string>> relative = new Dictionary , string>> { { "+", (checkSet, part) => { }} }; -
@sc_ray 他有一个字典,该字典具有一个字符串键和一个值,该值是一个 Action,它采用 XmlNode 类型的 HashSet 和一个字符串。他正在使用字典类型初始化程序快捷方式,相当于调用
.Add("+", (checkSet, part) => { });,它将一个新的键值对添加到字典中,其中键为+,值是等效于以下方法的lambda:void EmpyMethod(HashSet<XmlNode> checkSet, string part) { /* nothing */ } -
@Will:我正在移植一个 JavaScript 库(猜猜是哪一个),并且我正在尝试维护它们的大部分命名约定,所以我不会混淆自己。该类以下划线开头,因为我将其视为成员变量而不是类(它是子类)。整个事情就像一个很大的私有常量。
-
@sc_ray:补充一下将要说的内容……我只是还没有填写那个“匿名方法”。课程大约完成了一半;)还有很多常量要塞进去。我可能会采取不同的方法,因为这有点荒谬。
标签: c# initialization static-classes