Das Problem ist in der Mitte der Haupt an der Linie, dieWie kann ein Objekt nicht gleich sein? (SSIS Script Task)
if ((byte[])Dts.Variables["User::EncryptionKey"].Value == noKey)
liest Wenn GetEncryptionKey ‚versagt‘ und gibt NOKEY, das ‚wenn‘ noch nimmt den ‚else‘ Weg und ich don Warum nicht? Ich habe das mit identischen Ergebnissen versucht.
if (noKey.Equals((byte[])Dts.Variables["User::EncryptionKey"].Value))
Es sei denn, jeder Hinweis auf NOKEY ist irgendwie eine neue Kopie von Byte Instanziieren [0] Ich sehe nicht, wie sie ungleich sein können. Ich bin viele Male durchgetreten und sie sehen auf jeden Fall gleich aus.
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!
}
Nun, Sie führen einen Referenzvergleich durch. Wenn das Zuweisen zu der "Value" -Eigenschaft (oder das Abrufen) eine Kopie des Arrays annimmt, würde das Dinge erklären ... kannst du das auf ein [mcve] reduzieren? (Es gibt eine Menge Code hier, von denen die meisten aussehen, als wäre es unnötig, dies zu reproduzieren ...) –
Mögliches Duplikat von [Überprüfung der Gleichheit für zwei Byte-Arrays] (https://stackoverflow.com/questions/18472867/checking-equality -für-zwei-Byte-Arrays) – Eris
Sieht so aus, als ob Sie auf Autoboxing stolpern. Siehe "[Vergleichen Sie zwei Arrays von Primitiven in Java?] (Https://stackoverflow.com/questions/630808/compare-two-arrays-of-primitives-in-java)". –