C#无法设置字符串值-而是设置\ 0

时间:2019-06-03 19:55:50

标签: c# visual-studio visual-studio-2017 visual-studio-2019

我正在调试单元测试。单元测试类中的以下代码清楚地将字符串设置为值“ 2”。但是调试器正在将其转换为“ \ 0”(请参见屏幕截图)。我将字符串值更改为具有n个字符的其他值,并显示为n \ 0。即\ 0 \ 0 \ 0 \ 0 \ 0 \ 0。

单元测试也因此失败。

我尝试将立即窗口的值改回2,然后通过单元测试。

password2 = "2";

为什么Visual Studio / C#在将值2分配给字符串时遇到麻烦?

\0

1 个答案:

答案 0 :(得分:0)

向开发人员讲话,测试很糟糕。 CI也没有选择它,所以这是一场完美的风暴。该测试使用RtlZeroMemory将内存引用归零,这是我之前从未见过的。

感谢所有花费时间进行调查的人。

[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("...")]
[ComVisible(true)]
public class FileEncryption
{
    [DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]
    public static extern bool ZeroMemory(IntPtr Destination, int Length);

    public void Decrypt(string filenamewithpath, string password)
    {
        // We manually control memory and free when it is completed
        GCHandle gch = GCHandle.Alloc(password, GCHandleType.Pinned);
        try
        {
            ...
            ZeroMemory(gch.AddrOfPinnedObject(), password.Length * 2);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            gch.Free();