我正在使用Sandcastle 2.4.10520和Sandcastle Help File Builder 1.8.0生成.chm帮助文件.
在我的文档中,我正在使用<see>标签.
如果我尝试将枚举称为<see cref="NumberStyles"/>完美无缺.
如果我尝试引用枚举值,就像<see cref="NumberStyles.AllowTrailingWhite"/>我在文档文件中得到一个链接,但链接导致我找不到MSDN页面
我没有收到任何警告 - 我的xml文档是正确的.
我注意到引用枚举值的MSDN页面也有一个找不到页面的链接.例如:UInt64.Parse方法(String,NumberStyles,IFormatProvider)引用NumberStyles.AllowHexSpecifier,这导致找不到另一个MSDN页面.
我应该引用枚举而不是枚举值吗?
我该怎么做才能引用枚举?它甚至可能吗?
我最近从Visual Studio 2008将项目升级到Visual Studio 2010.
在Visual Studio 2008中,此代码分析规则不存在.
现在我不确定我是否应该使用这条规则.
我正在构建一个开源库,因此让人们免于犯错似乎很重要.但是,如果我要做的就是ArgumentNullException在参数出现时抛出null,它似乎编写无用的代码,因为ArgumentNullException即使我不编写该代码也会被抛出.
编辑:此外,还有一个性能问题需要解决.检查null每种公共方法都可能导致性能问题.
我应该删除该规则还是修复违规行为?
我最近将我的项目从Visual Studio 2008升级到Visual Studio 2010.
通过启用代码分析,我收到了很多警告,导致规则CA2204:文字应拼写正确.
编辑:
假设我有一个调用的方法GetResult(),并且在其中我想出于某种原因抛出异常.我想要例外说"GetResult() has failed for some reason".这将给我警告,因为GetResult不是一个字.我不会在方法名称上收到警告GetResult(),只有当我把它放在一个字符串中时.这是因为Get和Result是合法的词.
我不相信写作GetResult() has failed for some reason是解决方案.
编辑:在MSDN中它说:
此规则将文字字符串解析为单词,标记复合词,并检查每个单词/标记的拼写.
这是否意味着应该将GetResult检查为两个词:"获取"和"结果"?
我应该抑制CA2204吗?
我已经开始使用.NET 4 System.Numerics.BigInteger结构,我遇到了一个问题.
我正在尝试解析包含没有符号的十六进制数字的字符串(正数).我得到一个负数.
例如,我执行以下两个断言:
Assert.IsTrue(System.Int64.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "Int64");
Assert.IsTrue(System.Numerics.BigInteger.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "BigInteger");
Run Code Online (Sandbox Code Playgroud)
第一个断言成功,第二个断言失败.我实际上得到-8而不是8 BigInteger.
问题似乎是我十六进制从1位开始而不是0位(8和F之间的数字).如果我添加前导0,一切都很完美.
这对我来说是一个不好的用法吗?这是一个错误BigInteger吗?
我正在使用.NET 4的System.Numerics.BigInteger结构.
我需要计算非常大的数字的平方(x 2) - 数百万的十进制数字.
如果x是a BigInteger,那么时间复杂度是多少:
x*x;
Run Code Online (Sandbox Code Playgroud)
要么
BigInteger.Pow(x,2);
Run Code Online (Sandbox Code Playgroud)
?
如何使用.NET 4 BigInteger以最快的方式增加这么大的数字?是否有Schönhage-Strassen算法的实现?
我发现C++/CLI是一个非常强大的语言,可以用.NET包装C/C++库.
我认为这比使用PInvoke for C出于各种原因要好得多.
但是,当我将项目升级到Visual Studio 2010时,我发现它对C++/CLI的支持较少.
例子:
微软声称:
我想说清楚,虽然我们无法解决这个问题,但由于时间和资源限制,我们减少了对C++/CLI的支持.这并不表示我们正在远离技术.
但是,C++/CLI从未得到过如此好的支持,如果当前版本的VS支持较少,那么未来会有什么作用呢?
我只是想学习初学者的语法,以及当我在VS2008中编写这么短的代码时它是如何工作的.下面的代码用于添加数字1到499,但如果我添加1到500,编译器错误给我:
fatal error C1001: An internal error has occurred in the compiler.
而我只是想知道为什么会这样.编译器可以生成多少代码或者某些东西是否有一些限制,它恰好是我的一个很好的整数500?
#include <iostream>
using namespace std;
template < int b >
struct loop {
enum { sum = loop< b - 1 >::sum + b };
};
template <>
struct loop< 0 > {
enum { sum = 0 };
};
int main() {
cout << "Adding the numbers from 1 to 499 = " << loop< 499 >::sum << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在直接从数据包中解析HTTP数据(无论是TCP重构还是非重构,你都可以认为是这样).
我正在寻找尽可能准确地解析HTTP的最佳方法.
这里的主要问题是HTTP标头.
看一下HTTP/1.1的基本RFC,似乎HTTP头解析会很复杂.RFC描述了标头不同部分的非常复杂的正则表达式.
我应该编写这些正则表达式来解析HTTP头的不同部分吗?
到目前为止我为HTTP标头编写的基本解析是针对通用HTTP标头:
message-header = field-name ":" [ field-value ]
Run Code Online (Sandbox Code Playgroud)
和我已经包含替换内LWS用SP和重复使用相同的报头field-name,如第4.2节描述的逗号分隔值.
但是,以第14.9节为例可以看出,为了解析field-value我的不同部分,我需要一个更复杂的解析方案.
您如何建议我应该处理HTTP解析的复杂部分(特别是field-value),假设我想为解析器用户提供HTTP的全部功能并解析HTTP的每个部分?
对此的设计建议也将不胜感激.
谢谢.
我有一个复杂的正则表达式,我用代码构建.我想将它规范化为最简单(规范)的形式,它将是一个等价的正则表达式但没有额外的括号等等.
我希望它被规范化,这样我就可以理解它是否正确并找到它中的错误.
以下是我想要规范化的正则表达式的示例:
^(?:(?:(?:\r\n(?:[ \t]+))*)(<transfer-coding>(?:chunked|(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E0-9A-Z\x5E\x7A\x7C\x7E-\xFE]+)(?:(?:;(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E0-9A-Z\x5E\x7A\x7C\x7E-\xFE]+)=(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E0-9A-Z\x5E\x7A\x7C\x7E-\xFE]+)|(?:"(?:(?:(?:|[^\x00-\x31\x127\"])|(?:\\[\x00-\x127]))*)))))*))))(?:(?:(?:\r\n(?:[ \t]+))*),(?:(?:\r\n(?:[ \t]+))*)(<transfer-coding>(?:chunked|(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E0-9A-Z\x5E\x7A\x7C\x7E-\xFE]+)(?:(?:;(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E0-9A-Z\x5E\x7A\x7C\x7E-\xFE]+)=(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E0-9A-Z\x5E\x7A\x7C\x7E-\xFE]+)|(?:"(?:(?:(?:|[^\x00-\x31\x127\"])|(?:\\[\x00-\x127]))*)))))*))))*))$
Run Code Online (Sandbox Code Playgroud) 请看以下示例:
string foo(int i) {
string a;
... Process i to build a ...
return a;
}
void bar(int j) {
const string& b = foo(j);
cout << b;
}
Run Code Online (Sandbox Code Playgroud)
我知道RVO和NRVO,但我认为为了做到这一点,我需要写下如下栏:
void bar(int j) {
string b = foo(j);
cout << b;
}
Run Code Online (Sandbox Code Playgroud)
两个版本似乎都有效,我相信具有相同的性能.使用第一个版本(使用const引用)是否安全?
谢谢.