从VB转换为C#的代码中的运行时错误

时间:2016-08-01 12:17:22

标签: c# vb.net winforms

我在VB中有这段代码

 Private Function ReadProfileViewPlotOptions(ByVal SavePath As String) As ProfileViewOptionsType
            Dim FileName As String
            Dim filenumber As Short
            Dim InInt As Integer
            FileName = System.IO.Path.Combine(SavePath, "cfgpropt.sys")
            If Not System.IO.File.Exists(FileName) Then
                With ReadProfileViewPlotOptions
.ViewConcave = CBool(GetSetting(My.Application.Info.Title, "ProfileViewPlotOptions", "ViewConcave", CStr(1)))
-----

我将其转换为 C#就像这样

private static Mold_Power_Suite.Model.FrontEndStructures.PlanViewOptionsType ReadPlanViewPlotOptions(string SavePath)
        {
            var title = ((AssemblyTitleAttribute)System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false)[0]).Title;
            Mold_Power_Suite.Model.FrontEndStructures.PlanViewOptionsType functionReturnValue = default(Mold_Power_Suite.Model.FrontEndStructures.PlanViewOptionsType);
            string FileName = null;
            short filenumber = 0;
            int InInt = 0;
            FileName = System.IO.Path.Combine(SavePath, "cfgplopt.sys");
            if (!System.IO.File.Exists(FileName))
            {
                functionReturnValue.ViewConcave = Convert.ToBoolean(Interaction.GetSetting(title, "PlanViewPlotOptions", "ViewConcave", Convert.ToString(1)));
-----
}

在运行期间,我的代码在行

处断开
  

functionReturnValue.ViewConcave =   Convert.ToBoolean(Interaction.GetSetting(title,“PlanViewPlotOptions”,   “ViewConcave”,Convert.ToString(1)));

编译器显示的错误是“Format Exception Unhandled”.String未被识别为有效的布尔值。“

我哪里错了?

3 个答案:

答案 0 :(得分:1)

未找到设置时GetSetting会返回默认值"1",即包含值string的{​​{1}}。这不能通过1转换为bool。但由于Convert的最后一个参数必须是GetSetting,您可以使用

string

或只是

Convert.ToBoolean(Interaction.GetSetting(title, "PlanViewPlotOptions", "ViewConcave", Convert.ToString(true)));

答案 1 :(得分:1)

采用字符串的方法Convert.ToBoolean期望输入为:

  

包含Boolean.TrueString或Boolean.FalseString值的字符串。

其中TrueString为“True”且FalseString为“False”。

如果GetSettings返回的字符串既不是这些字符串,那么该方法将引发FormatException。

您需要将GetSettings的返回值分配给变量,然后确保它是正确的格式或自己进行真/假测试。但是你传递Convert.ToString(1)作为默认值,所以如果设置不存在,你将返回字符串“1”,既不是“真”也不是“假”。

将默认值更改为“True”:

functionReturnValue.ViewConcave = Convert.ToBoolean(Interaction.GetSetting(title, "PlanViewPlotOptions", "ViewConcave", "True"));

答案 2 :(得分:0)

您可以替换此行

functionReturnValue.ViewConcave = 
    Convert.ToBoolean(Interaction.GetSetting(title, "PlanViewPlotOptions", "ViewConcave", Convert.ToString(1)));

以下内容:

functionReturnValue.ViewConcave = 
    Convert.ToBoolean(Convert.ToInt32(Interaction.GetSetting(title, "PlanViewPlotOptions", "ViewConcave", "1")));

因为接受整数的Convert.ToBoolean重载正确1转换为false,而重载则接受一个字符串将无法转换"1",因为它必须为"True" / "False"

因此,提供GetSetting将返回一个字符串,该字符串可以转换为Int32,这将起作用