为什么params byte []参数不起作用?

xya*_*yaz 3 c# design-patterns

我有一个模式扫描仪的方法

public static int FindPFM(int Module,long ModuleL,int Offset,params byte[] pattern)
    {

        string mask = MaskFromPattern(pattern);
        int address, val1, val2;

        address = FindAddress(pattern, 3, mask, Module, ModuleL);
        val1 = ReadInt32(scanner.Process.Handle, address);
        address = FindAddress(pattern, 18, mask, Module, ModuleL);
        val2 = ReadByte(scanner.Process.Handle, address);
        val1 = val1 + val2 - Module;
        Offset = val1;
        return Offset;
    }
Run Code Online (Sandbox Code Playgroud)

使用params和b

        localPlayer = FindPFM((0x8D, 0x34, 0x85, 0x00, 0x00, 0x00, 0x00, 0x89, 0x15, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x41, 0x08, 0x8B, 0x48, 0x00), dllClientAddress, dllClientSize, localPlayer);
Run Code Online (Sandbox Code Playgroud)

当我使用它,但它说:"不能将int int int ....转换为字节"但0x8D是1字节,这是一个字节向量,为什么会出现那个错误?

编辑1:我试过这样做

        localPlayer = FindPFM(new byte[] { 0x8D, 0x34, 0x85, 0x00, 0x00, 0x00, 0x00, 0x89, 0x15, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x41, 0x08, 0x8B, 0x48, 0x00 }, dllClientAddress, dllClientSize, localPlayer);
Run Code Online (Sandbox Code Playgroud)

但它也没有奏效.

Jon*_*eet 6

当您使用参数数组调用方法时,参数将在结尾处而不是从头开始(以匹配参数数组位置).接下来,参数不会像你试图做的那样放在括号中 - 这就是C#7元组文字的语法.从参数名称和参数名称判断有点棘手,但我认为你想要:

localPlayer = FindPFM(dllClientAddress, dllClientSize, localPlayer,
     0x8D, 0x34, 0x85, 0x00, 0x00, 0x00, 0x00, 0x89, 0x15, 0x00,
     0x00, 0x00, 0x00, 0x8B, 0x41, 0x08, 0x8B, 0x48, 0x00);
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子::

using System;

public class Test
{
    static void Main()
    {
        Foo(10, 20, 0x80, 0x8d, 0xff);
    }

    static void Foo(int x, int y, params byte[] bytes)
    {
        Console.WriteLine($"x: {x}");
        Console.WriteLine($"y: {y}");
        Console.WriteLine($"bytes: {BitConverter.ToString(bytes)}");
    }
}
Run Code Online (Sandbox Code Playgroud)