我一直在 .NET 中对 XML 进行一些测试,发现很多有效的名称字符是不允许的。在几乎所有情况下,我都会在看似有效的字符上收到 XmlException。
XmlException 是从 System.Xml.dll 引发的,带有以下堆栈跟踪:
在 System.Xml.XmlConvert.VerifyNCName(String name, ExceptionType exceptionType) 在 System.Xml.Linq.XName..ctor(XNamespace ns, String localName) 在 System.Xml.Linq.XNamespace.GetName(String localName) 在 System。 Xml.Linq.XName.Get(字符串扩展名)
但是,在名称以“{”字符(十六进制值 0x7B)开头的情况下,我会从 System.Xml.Linq.dll 获得 ArgumentException,并带有以下堆栈跟踪:
在 System.Xml.Linq.XName.Get(字符串扩展名)
奇怪的是,这只适用于“{”是名称中的第一个字符时。如果它稍后出现在名称中,我会得到与所有其他“无效”字符相同的异常和堆栈跟踪。
由于我试图专门捕获这些异常来包装并抛出我自己的异常,所以我希望(我认为是合理的)它们都会抛出相同的异常。
为什么这会引发 ArgumentException 而不是 XmlException?