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

Nai*_*aix 2 c#

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

这是第一个Flare-On挑战,名为Memecat Battlestation,我运行的是Windows 7 64位,错误在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)];
        });
    }
Run Code Online (Sandbox Code Playgroud)

我曾期望它可以在没有任何错误的情况下进行构建,但是我遇到了以下错误:

'无法将类型' System.Collections.Generic.IEnumerable<int>' 隐式转换为' System.Collections.Generic.IEnumerable<byte>'。存在显式转换(您是否缺少演员表?)'

Jon*_*eet 10

这行:

return b ^ s[(int)(s[i] + s[j] & byte.MaxValue)]
Run Code Online (Sandbox Code Playgroud)

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

return (byte) (b ^ s[(int)(s[i] + s[j] & byte.MaxValue)]);
Run Code Online (Sandbox Code Playgroud)

我个人会使用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)]);
});
Run Code Online (Sandbox Code Playgroud)

  • 您的意思是“该语句返回** int **”对吗?还是我错过了什么? (2认同)