将字符串的 2darray 作为参数传递时出现“错误:类型的数组值”

Posted

技术标签:

【中文标题】将字符串的 2darray 作为参数传递时出现“错误:类型的数组值”【英文标题】:"Error:Array value expected for type" when passing 2darray of string as parameter Nethereum 【发布时间】:2021-10-19 07:10:56 【问题描述】:

我使用 ganache truffle 套件作为本地区块链来测试我的智能合约。 这是我的solidity函数,我可以添加一个二维字符串数组并用它填充一个映射(字符串=>字符串):

   function AddSignature(string[][] memory _signature) public
         for ( uint i = 0 ; i < _signature.length; i++ ) 
           
           require(!_studentExists[_signature[i][0]]);
         signatures[_signature[i][0]] = _signature[i][1];
         _studentExists[_signature[i][0]]=true;
            

这是我的 program.cs 代码,我尝试通过 .net 与 AddSignature 函数进行通信:

 class Program

    static void Main(string[] args)
    
        //The URL endpoint for the blockchain network.
         string url = "HTTP://127.0.0.1:7545";

        //The contract address.
        string address =
            "0x4373671d1fC2d795A7c066E27CAB732933343b15";

        //The ABI for the contract.
        string ABI =
        @"..."

       
         Web3 web3 =  new Web3(url);
        Contract CryptoD =  web3.Eth.GetContract(ABI, address);

        Console.WriteLine("Enter your address: ");

        string addressStudent = Console.ReadLine(); 
        Console.WriteLine("Enter your signature: ");

        string signature = Console.ReadLine(); ;

        string[,] duo = new string[, ]
        
             addressStudent, signature 
        ;

        try
        

            Task<string> mintFunction = CryptoD.GetFunction("AddSignature").
                SendTransactionAsync(from: "0xe801bF0abd0eC70d77a954AF901D4AF747c0CfF2BALANCE",duo);
            mintFunction.Wait();
            Console.WriteLine("signature added!");
        
        catch (Exception e)
        
            Console.WriteLine("Error: 0", e.Message);
        
    



【问题讨论】:

【参考方案1】:

我通过传递二维数组而不是一维数组作为参数解决了这个错误

【讨论】:

以上是关于将字符串的 2darray 作为参数传递时出现“错误:类型的数组值”的主要内容,如果未能解决你的问题,请参考以下文章

为啥在将命令行图像文件中的参数作为参数传递时出现错误

将指向常量的指针作为参数传递时出现问题

将变量名称作为参数从外部函数传递到 R 中的内部函数时出现问题?

为啥将字符串作为文件名而不是 char* 传递时出现错误?

从 rexx 代码向 ispf 宏传递参数时出现无效长度错误

将字符串从 std::string 转换为 const char * 时出现数据丢失问题