匿名托管的 DynamicMethods 程序集:无法将类型“字符串”隐式转换为“整数”

Posted

技术标签:

【中文标题】匿名托管的 DynamicMethods 程序集:无法将类型“字符串”隐式转换为“整数”【英文标题】:Anonymously Hosted DynamicMethods Assembly: Cannot implicitly convert type 'string' to 'int' 【发布时间】:2021-01-05 15:04:57 【问题描述】:

我正在开发一个 AZURE 函数。该函数的目的是 计算模块的状态:失败、通过宽恕、通过或有区别地通过。当我运行代码时,我得到了这个错误。我在标记处得到一个错误,因为它是一个整数。

Executed 'Function1' (Failed, Id=90c68ac4-4bc1-4446-9ad4-2b15e8ea8a00, Duration=145230ms)
System.Private.CoreLib: Exception while executing function: Function1. Anonymously Hosted DynamicMethods Assembly: Cannot implicitly convert type 'string' to 'int'.

班级:

class MarkEntry

    public string StudentNumber  get; set; 
    public string Name  get; set; 
    public int Mark  get; set; 
    public string Module  get; set; 

Azure 函数接受 4 个输入并检查学生是否获得了宽恕的通行证:

    [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        
            MarkEntry obj = new MarkEntry();
            string responseMessage ="";
            string respmaessage="";
            string result="";
            log.LogInformation("C# HTTP trigger function processed a request.");

            obj.StudentNumber = req.Query["studentnumber"];
           obj.Name = req.Query["name"];
           obj.Module = req.Query["module"];
            obj.Mark =Convert.ToInt32(req.Query["mark"]);


            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            obj.StudentNumber = obj.StudentNumber ?? data?.name;
            obj.Name = obj.Name ?? data?.name;
            obj.Module = obj.Module ?? data?.name;
           obj.Mark = obj.Mark.ToString() ?? data?.obj.Mark.Tostring();







            if (string.IsNullOrEmpty(obj.StudentNumber))
            
                respmaessage = "Enter a student number";
                return new OkObjectResult(respmaessage);

            


            if (string.IsNullOrEmpty(obj.Name))
            
                respmaessage = "Enter a student Name";
                return new OkObjectResult(respmaessage);

            
         
            
            if (string.IsNullOrEmpty(obj.Module))
            
                respmaessage = "Enter Student Module";
                return new OkObjectResult(respmaessage);

            


            if (obj.Mark<49)
            
                result = "Condoned Pass";

            

            responseMessage = string.Format($"Student Number: obj.StudentNumber" + "\n" +
$"Student Name: obj.Name" + "\n" + $"Student Mark: obj.Mark" + "\n" +
$"Student Module: obj.Module" + "\n" + $"Student Result: result"
                );
              

            return new OkObjectResult(responseMessage);

        
    

【问题讨论】:

line Convert.ToInt32(req.Query["mark"]); 似乎是导致问题的原因。检查您在 req.Query["mark"] 中收到了什么 在 req.Query["Mark"] 下收到一个整数 【参考方案1】:

MarkEntry 类具有定义为整数类型的 Mark 属性。在 azure 函数中,我们实例化了这个类。 ...

MarkEntry obj = new MarkEntry();

然后在函数的第 13 行左右......

obj.Mark = obj.Mark.ToString() ?? data?.obj.Mark.Tostring();

看起来我们正试图为这个整数分配一个字符串值。 不确定这是否可行?

【讨论】:

以上是关于匿名托管的 DynamicMethods 程序集:无法将类型“字符串”隐式转换为“整数”的主要内容,如果未能解决你的问题,请参考以下文章

WCF 托管在 IIS6 上

CLR的执行模型(2):将托管模块合并成程序集

我有一个托管DLL和C#中的托管程序 - 我希望托管DLL在程序集内部而不是外部[重复]

如何在非托管 c++ dll 中查找调用方程序集名称

如何将本机 C++ 静态库链接到托管 C++ 程序集

创建强命名托管 (/clr) C++ 程序集