在c#中将String转换为Int时出现错误

本文关键字:错误 Int 中将 String 转换 | 更新日期: 2023-09-27 18:12:06

首先,我对c#相当陌生,但我正在尝试将字符串转换为Int。我在Visual Studio中没有错误,但当我实际上试图在Sitecore中预览我的页面时,我得到一个错误。错误是System。FormatException:输入字符串格式不正确。

这是我的代码:

public string numColumnStr = "";
        numColumnStr = parameters.columns;
        int numColumns = 2;
        if (numColumns != null)
            numColumns = Convert.ToInt32(numColumnStr);

我希望列的默认值为2。然后是

在c#中将String转换为Int时出现错误

我做了两个更改,首先我使用tryparse而不是convert。

第二,我做了一个判断,你的意思是比较字符串为空,而不是整数。所以我更新了这一行来检查字符串是空还是空。

public string numColumnStr = "";
        numColumnStr = parameters.columns;
        int numColumns = 2;
        if (!string.IsNullOrEmpty(numColumnStr))
            int.TryParse(numColumnStr, out numColumns);

在我看来,您正在检查错误的变量。也许你想这样做:

public string numColumnStr = "";
    numColumnStr = parameters.columns;
    int numColumns = 2;
    if (!String.IsNullOrEmpty(numColumnStr))
        numColumns = Convert.ToInt32(numColumnStr);

虽然您的代码相当笨拙,但只需做一个小小的更改:

改变:

if (numColumns != null)

:

if (numColumnStr != null)

看起来后面的字符串不是一个有效的整数。

使用tryParse(),如果它被成功解析或者它是一个有效的整数,它将返回一个标志true:

bool parsed = int.TryParse(numColumnStr,out numColumns);
if(parsed)
    // do something with numColumns here

参见 MSDN详细信息

这是你需要的c#代码:

int numColumns = 2; // default value
int.TryParse(parameters.columns, out numColumns);

现在我怀疑参数。列实际上并不指向您所期望的内容。如果该值为null或空,则会抛出该错误。

既然您正在使用Sitecore,您也可以使用Sitecore. kernel .dll中的实用程序函数:

int numColumns = Sitecore.MainUtil.GetInt(parameters.columns, 2)

供参考,函数内部执行以下操作:

public static int GetInt(string value, int defaultValue)
{
  int result;
  if (value == null || value.Length == 0 || !int.TryParse(value, out result))
    return defaultValue;
  else
    return result;
}