我在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未被识别为有效的布尔值。“
我哪里错了?
答案 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,这将起作用