c# - 如何修复 C# 中的 'Cannot implicitly convert type' 错误?

标签 c#

我正在做 flare-on 挑战 (Memecat Battlestation),我决定..绕过它,Demo Shareware 一个被绕过,但是损坏的标志所以我想我会尝试完整版,我试过了完整版,但我遇到了错误

这是第一个名为 Memecat Battlestation 的 Flare-On 挑战,我运行的是 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)];
        });
    }

我原以为它会在没有任何错误的情况下构建,但我收到了这个错误:

'Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<int>' to 'System.Collections.Generic.IEnumerable<byte>'. An explicit conversion exists (are you missing a cast?)'

最佳答案

这一行:

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)]);
});

关于c# - 如何修复 C# 中的 'Cannot implicitly convert type' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57555612/

相关文章:

c# - 使用 operator[] 即时创建字典项

c# - 您如何查询搜索结果中的 block ?

c# - 使用注入(inject)的通用类型变体实现服务定位器

c# - C# 警告中的冗余显式属性名称

c# - 配置ReSharper的 "Possible multiple enumeration"为其他类型

c# - 如何在 C# 中将两个参数作为一个参数发送?

c# - 无法在代码中获取 DropDownList 的文本 - 可以获取值但不能获取文本

c# - 将触发器的第一次触发时间设置为 StartAt() 中提到的日期

c# - 如何获取全系统.NET Core 运行环境的基本路径?

c# - 学习有关数据驱动应用程序的 OOP 设计模式的资源