代码之家  ›  专栏  ›  技术社区  ›  CactusCake

if语句中应有分号

  •  0
  • CactusCake  · 技术社区  · 7 月前

    我从另一个在线问答中借用了一些代码(被接受为有效的解决方案),但我的编译器似乎希望有一些额外的字符,我不明白为什么。

    编译器期待所有这些:

    Line: 37 - ) expected
    Line: 37 - ; expected
    Line: 37 - Invalid expression term ')'
    Line: 37 - ; expected
    

    在线路上:

    if (ex is Avalara.AvaTax.RestClient.AvaTaxError avaTaxError)
    

    在下面的代码块中

    using System;
    using SAPbobsCOM;
    using SAPbouiCOM;
    using Avalara.AvaTax.RestClient;
    namespace B1UPCODE 
    { 
        public class B1UPCLASS 
        { 
            public void DynamicCode(params object[] parameters) 
            { 
                SAPbobsCOM.Company company = (SAPbobsCOM.Company)parameters[0];
                SAPbouiCOM.Application application = (SAPbouiCOM.Application)parameters[1];
                SAPbouiCOM.Form form = (SAPbouiCOM.Form)parameters[2];
                SBO.UI.B1Form eventForm = (SBO.UI.B1Form)parameters[3];
                UniversalFunctions.Model.CommonEventObject eventData = (UniversalFunctions.Model.CommonEventObject)parameters[4];
                SBO.AddonLogic.AddonData addonData = (SBO.AddonLogic.AddonData)parameters[5];
                var Client =    new AvaTaxClient("Whatever I want to call the client", "1.0", Environment.MachineName, AvaTaxEnvironment.Production)
                                .WithSecurity("MyUsername", "MyPassword");
                     
                // Verify that we can ping successfully
                var pingResult = Client.Ping();
                if ((bool)pingResult.authenticated)
                {
                    application.StatusBar.SetText("Ping success", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);
    
                    try
                    {
                        // Create a simple transaction for $100 using the fluent transaction builder
                        var transaction = new TransactionBuilder(Client, "DEFAULT", DocumentType.SalesInvoice, "9999")
                        .WithAddress(TransactionAddressType.SingleLocation, "255 S King St", null, null, "Seattle", "WA", "98104", "US")
                        .WithLineItem(100.0m, 1, "P0000000")
                        .Create();
                    }
                    catch(Exception ex)
                    {
    
                        if (ex is Avalara.AvaTax.RestClient.AvaTaxError avaTaxError)
                        {
                            // Print the error status code (e.g. "BadRequest", "Unauthorized", etc.)
                            application.StatusBar.SetText("AvaTax Error Type: " + avaTaxError.statusCode, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
                            // Print the error message returned by AvaTax
                            application.StatusBar.SetText("AvaTax Error Message: " + avaTaxError.error.error.message.ToString(), SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
    
                            // Print the error details for each error encountered
                            application.StatusBar.SetText("AvaTax Error Details:", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
    
                            foreach (var detail in avaTaxError.error.error.details)
                            {
                                // Print the description and help link for each error
                                application.StatusBar.SetText(" Description: " + detail.description, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
                                application.StatusBar.SetText(" Help Link: " + detail.helpLink, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
                            }
    
                            // Print the full error response received from AvaTax
                            application.StatusBar.SetText("Full Error Response: " + avaTaxError.error.error.ToString(), SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
    
                        }
                    }
                }
                else
                {
                application.StatusBar.SetText("Ping fail", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
                }
            } 
        } 
    }
    

    我尝试从if()比较中取出avaTaxError赋值,并在该块内创建一个变量——这让我只剩下一个预期的分号。但我仍然不明白它要我把它放在哪里。

            if (ex is Avalara.AvaTax.RestClient.AvaTaxError)
            {
                var (Avalara.AvaTax.RestClient.AvaTaxError) avaTaxError;
    
    2 回复  |  直到 7 月前
        1
  •  5
  •   Jonas Høgh    7 月前

    无论语言版本如何,以下代码都应该更地道,并强调您实际上打算吞下所有其他异常:

    try {
      // code here
    } catch (Avalara.AvaTax.RestClient.AvaTaxError avaTaxError) {
      // your if body here
    }
    catch (Exception) {}
      
    
        2
  •  3
  •   Ivan Petrov    7 月前

    您使用的是7.0之前的C#版本 where the pattern matching 具有 is 并介绍了任务。

    您可能使用的是较旧版本的Visual Studio(2015年或更早版本),因为2017+开箱即用。

    如果你(不太可能)在VS 2017+上,看看 LangVersion 财产在 csproj 并将其设置为7.0(或尝试删除它,因为这样它将默认为7.3-最新官方支持的.NET Framework C#版本)

    如果您使用的是VS2015及更早版本:

    if (ex is Avalara.AvaTax.RestClient.AvaTaxError)
        var avaTaxError = ex as Avalara.AvaTax.RestClient.AvaTaxError;