如何检查字符串是否为数字并将其分配给nullable int?

时间:2016-10-27 07:49:14

标签: c#

我有nullable int []和string。

string someStr = "123"; 

int? siteNumber = null;
string siteName= null;

在某些时候,我需要检查字符串是否为数字。

为此,我尝试了这个:

if (int.TryParse(someStr, out siteNumber)) 
    { } 
else 
    siteName = siteDescription;

但是因为siteNumber可以为空,我得到了这个错误:

cannot convert from 'out int?' to 'out int' 

如何检查字符串是否为数字,如果是,我需要将其分配给nullable int?

4 个答案:

答案 0 :(得分:4)

您可以使用中间变量,因为out参数类型应完全匹配。

int siteNumberTemp;
if (int.TryParse(someStr, out siteNumberTemp)) 
{
   siteNumber = siteNumberTemp;
} 
else 
   siteName = siteDescription;

答案 1 :(得分:4)

您可以编写自定义方法来执行此操作。

public int? TryParseNullableValues(string val)
{
    int outValue;
    return int.TryParse(val, out outValue) ? (int?)outValue : null;
}

答案 2 :(得分:0)

如果不使用其他变量,则无法执行此操作,因为out参数的类型必须与参数完全匹配。

 string someStr = "123";
 int? siteNumber = null;

 int tmp;
 if (!int.TryParse(someStr.Trim(), out tmp))
 {
     //Do something if not parsed
 }
 else
 {
     siteNumber = tmp;
 }

答案 3 :(得分:0)

最好的方法是使用此函数将字符串转换为int,无论它是否可为空。这个自定义函数将处理它。

public static Int32? CustomConvertToInt32(Object obj)
{
    string _strData = CustomConvertToStringOrNull(obj);

    Int32? _Nullable = null;
    Int32 _data;

    if (Int32.TryParse(_strData, out _data))
    {
        _Nullable = _data;
    }
    return _Nullable;
}

 public static string CustomConvertToStringOrNull(Object obj)
    {
        string _Nullable = null;
        if (obj != null)
        {
            if (obj.ToString().Trim() == "" || obj.ToString().Trim().ToLower() == "n/a")
            {
                _Nullable = null;
            }
            else
            {
                _Nullable = obj.ToString().Trim();
            }
        }

        return _Nullable;
    }


int? siteNumber = CustomConvertToInt32(someStr);