如何解决C#中的“无法隐式转换类型”错误?

时间:2019-08-19 11:13:26

标签: c#

我正在进行耀斑挑战(Memecat Battlestation),因此我决定去做。。绕过它,演示共享软件被绕过了,但是标志损坏了,所以我想我应该尝试完整版,我尝试过完整版,但我遇到了错误

这是针对名为Memecat Battlestation的第一个Flare-On挑战,我正在运行64位Windows 7,错误在VictoryForm.cs中

    private static IEnumerable<byte> AssignFelineDesignation(byte[] cat, IEnumerable<byte> data)
    {
        byte[] s = BattleCatManagerInstance.InvertCosmicConstants(cat);
        int i = 0;
        int j = 0;
        return data.Select(delegate (byte b)
        {
            i = (i + 1 & 255);
            j = (j + (int)s[i] & 255);
            BattleCatManagerInstance.CatFact(s, i, j);
            return b ^ s[(int)(s[i] + s[j] & byte.MaxValue)];
        });
    }

我期望它的构建没有任何错误,但是我遇到了这个错误:

  

'无法隐式转换类型   'System.Collections.Generic.IEnumerable<int>'到   'System.Collections.Generic.IEnumerable<byte>'。一个明确的   转换存在(您是否缺少演员表?)'

1 个答案:

答案 0 :(得分:10)

此行:

return b ^ s[(int)(s[i] + s[j] & byte.MaxValue)]

...返回一个int,因为这是您使用的^运算符的类型。您可以将结果强制转换为byte

return (byte) (b ^ s[(int)(s[i] + s[j] & byte.MaxValue)]);

我个人会使用lambda表达式而不是匿名方法:

return data.Select(b =>
{
    i = (i + 1 & 255);
    j = (j + (int)s[i] & 255);
    BattleCatManagerInstance.CatFact(s, i, j);
    return (byte) (b ^ s[(int)(s[i] + s[j] & byte.MaxValue)]);
});