一个物体怎么能不相同呢? (SSIS脚本任务)

时间:2017-05-25 18:42:29

标签: c# ssis script-task

问题是在Main的中间位于读取行

if ((byte[])Dts.Variables["User::EncryptionKey"].Value == noKey)

当GetEncryptionKey'失败时#39;并返回noKey,' if'仍然需要'否则'道路,我不明白为什么。我尝试了相同的结果。

if (noKey.Equals((byte[])Dts.Variables["User::EncryptionKey"].Value))

除非对noKey的每次引用都以某种方式实例化byte [0]的新副本,否则我不知道它们是如何不相等的。我已经走了很多次,他们看起来一定很平等。

    private static byte[] noKey = new byte[0];

    public void Main()
    {
        int keyLen = 32;
            Dts.Variables["User::EncryptionKey"].Value =
                GetEncryptionKey((string)Dts.Variables["User::EncryptionKeyAsHex"].Value, keyLen);

        if ((byte[])Dts.Variables["User::EncryptionKey"].Value == noKey)
        {
            Dts.TaskResult = (int)ScriptResults.Failure;
        }
        else
        {
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }

    private static byte[] GetEncryptionKey(string hexString,int numBytes)
    {
            return noKey;  //<-this definitely does get hit!
    }

2 个答案:

答案 0 :(得分:1)

问题出在哪里: “除非对noKey的每次引用都以某种方式实例化byte [0]的新副本,否则我看不出它们是如何不相等的。”我从未想过Dts .... Value.set是创建新副本的人。

感谢Ed Plunkett建议我调查,因为事实证明这是真的。

将返回值存储在局部变量中以便在比较中使用可以避免此问题。

答案 1 :(得分:0)

我认为你在这里混淆了这个概念,两个数组不一样,因为它们共享相同的元素。 operator ==调用ReferenceEquals,它检查两个元素是否都指向内存中的相同空间。

在这里查看差异C# .Equals(), .ReferenceEquals() and == operator

尝试使用@Eris方法。 希望这个帮助