小编bri*_*ner的帖子

为什么固定大小的缓冲区(数组)必须是不安全的?

假设我想要一个7字节(或3或777)的值类型.

我可以这样定义:

public struct Buffer71
{
    public byte b0;
    public byte b1;
    public byte b2;
    public byte b3;
    public byte b4;
    public byte b5;
    public byte b6;
}
Run Code Online (Sandbox Code Playgroud)

定义它的一种更简单的方法是使用固定缓冲区

public struct Buffer72
{
    public unsafe fixed byte bs[7];
}
Run Code Online (Sandbox Code Playgroud)

当然第二个定义更简单.问题在于必须为固定缓冲区提供unsafe关键字.我知道这是使用指针实现的,因此不安全.

我的问题是为什么它必须是不安全的?为什么C#不能提供任意常量长度数组并将它们保存为值类型而不是使其成为C#引用类型数组或不安全缓冲区?

c# arrays unsafe fixed value-type

25
推荐指数
1
解决办法
6460
查看次数

在Visual Studio之外查看代码覆盖率结果

我有一些单元测试,并获得了一些代码覆盖率数据.现在,我希望能够在Visual Studio之外查看代码覆盖率数据,比如在Web浏览器中.但是,当我将代码覆盖率导出到xml文件时,我无法对其进行任何操作.那里有读者吗?我是否必须编写一个xml解析器,然后按照我想要的方式显示它(看起来像是浪费,因为visual studio已经这样​​做了.)看起来有点傻到必须把我的代码覆盖率结果截图作为我的"报告"建议?

c# code-analysis code-coverage report

22
推荐指数
2
解决办法
2万
查看次数

在VS 2010中有一种简单的方法来签署C++ CLI程序集吗?

现在我正在设置Linker/Advanced/KeyFile选项.

我收到"mt.exe:一般警告810100b3:是一个强名称签名的程序集,并且嵌入清单会使签名无效.您需要重新签名此文件才能使其成为有效的程序集." .

从网上阅读,听起来我必须设置延迟签名选项,下载SDK,并运行sn.exe作为后期构建事件.当然在VS2010中必须有一种更简单的方法来执行这种常见操作?

.net c++-cli visual-studio-2010 assembly-signing

21
推荐指数
2
解决办法
6450
查看次数

.NET字节上的正则表达式而不是字符

我正在尝试使用正则表达式进行一些更容易的解析.

输入是字节的数组(或枚举).

我不想将字节转换为字符,原因如下:

  1. 计算效率
  2. 内存消耗效率
  3. 某些不可打印的字节可能很复杂,无法转换为字符.并非所有字节都是可打印的.

所以我不能使用正则表达式.

我所知道的唯一解决方案是使用Boost.Regex(它在字节上工作--C字符),但这是一个C++库,使用C++/CLI进行包装将需要相当多的工作.

如何直接在.NET中的字节上使用正则表达式,而无需使用.NET字符串和字符?

谢谢.

.net c# regex byte boost

16
推荐指数
1
解决办法
6305
查看次数

VC++内部编译器错误

我得到以下错误,有人可以帮助我如何解决它.

致命错误C1001:内部编译器错误(编译器文件 'F:\ vs70builds\3077\VC \编译\ CxxFE\SL\P1\C\pdbmgr.cpp',行149)请选择Visual C中的技术支持命令++帮助菜单,或打开技术支持帮助文件以获取更多信息

visual-c++ c1001

11
推荐指数
2
解决办法
4255
查看次数

CA2000在C#中将对象引用传递给基础构造函数

当我通过Visual Studio的代码分析实用程序运行一些代码时,我收到一个警告,我不确定如何解决.也许这里的某个人遇到了类似的问题,解决了这个问题,并愿意分享他们的见解.

我正在编写DataGridView控件中使用的自定义绘制单元格.代码类似于:

public class DataGridViewMyCustomColumn : DataGridViewColumn
{
    public DataGridViewMyCustomColumn() : base(new DataGridViewMyCustomCell())
    {
    }
Run Code Online (Sandbox Code Playgroud)

它会生成以下警告:

CA2000:Microsoft.Reliability:在方法'DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()'中,在对所有引用超出范围之前,对对象'new DataGridViewMyCustomCell()'调用System.IDisposable.Dispose.

我知道它警告我DataGridViewMyCustomCell(或它继承自的类)实现了IDisposable接口,并且应该调用Dispose()方法来清理DataGridViewMyCustomCell声明的任何资源.

我在互联网上看到的示例建议使用块来限制对象的生命周期并让系统自动处理它,但是当移动到构造函数的主体中时无法识别base,因此我无法编写使用阻止它...我不确定我还想要做什么,因为不会指示运行时释放仍然可以在以后在基类中使用的对象?

我的问题是,代码是否正常?或者,如何重构以解决警告?除非确实合适,否则我不想压制警告.

c# constructor code-analysis reliability ca2000

10
推荐指数
1
解决办法
2160
查看次数

为什么我在此代码中的out参数上获得代码分析CA1062?

我有一个非常简单的代码(从原始代码中简化 - 所以我知道它不是一个非常聪明的代码),当我使用代码分析在Visual Studio 2010中编译时,我会警告CA1062:验证公共方法的参数.

public class Foo
{
    protected static void Bar(out int[] x)
    {
        x = new int[1];
        for (int i = 0; i != 1; ++i)
            x[i] = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的警告:

CA1062:Microsoft.Design:在外部可见方法'Foo.Bar(out int [])'中,验证在使用之前从参数'x'重新分配的局部变量'(*x)'.

我不明白为什么我会收到这个警告,如何在不压制它的情况下解决它?可以new回来null吗?这是Visual Studio 2010的错误吗?

UPDATE

我决定打开关于Microsoft Connect的错误报告.

c# code-analysis fxcop visual-studio-2010 ca1062

8
推荐指数
2
解决办法
5717
查看次数

你选择什么,保护什么或内部?

如果我有一个类我想要的方法protectedinternal.我希望只有程序集中的派生类才能调用它.

由于protected internal手段protected 或者 internal,你必须做出选择.在这种情况下你选择什么 - protected或者internal

c# protected internal access-levels

8
推荐指数
2
解决办法
382
查看次数

在两个数组中找到"不相同"的元素

我有两个整数列表(List<int>).它们包含相同的元素,但列表1包含不在列表2中的元素.

如何查找列表1中哪些元素不在列表2中.

谢谢 :)

PS.郎是c#

c# arrays list

7
推荐指数
2
解决办法
906
查看次数

使用Sandcastle进行记录:使用<see>参考枚举值

我正在使用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页面.

我应该引用枚举而不是枚举值吗?

我该怎么做才能引用枚举?它甚至可能吗?

c# sandcastle msdn enums xml-documentation

6
推荐指数
1
解决办法
2162
查看次数