繁体   English   中英

输入的字符串格式不正确

[英]input string was not in the correct format error

我不知道为什么会发生此错误,谁能告诉我

 long? Max = row["MAX"].ToString() != null || row["MAX"].ToString() != "" ? long.Parse(row["MAX"].ToString()) : (long?)null;

如果您要检查row["MAX"]是否为null ,则应将该检查更改为:

row["MAX"] != null

这是因为ToString()返回值永远不会为null但是如果在null对象上调用它,则会抛出NullReferenceException (然后row["MAX"].ToString()对于null对象将失败)。

在您的情况下,它不是null而是空字符串,您可以更改为:

long? Max = (row["MAX"] != null && row["MAX"].ToString() != "") 
    ? long.Parse(row["MAX"].ToString()) : (long?)null;

但正如您所看到的那样,它并不是很可读,我将更改(跳过任何其他验证)为:

long? Max = null;
if (row["MAX"] != null && row["MAX"].ToString() != "")
    Max = Long.Parse(row["MAX"].ToString());

如果您的行object来自数据库(实际上我们不知道它的类型,因此我们可以猜测并假设它是object的字典),那么Jota WA的答案 (我认为是正确的)中指出的EDIT可能就是DBNull.Value而不是null 在这种情况下, row["MAX"] != nullfalse但是第二个检查row["MAX"].ToString() != ""捕获了此条件。 也就是说,如果这是您的情况,并且您确定字典中不包含任何实际的 null值,则可以使其更简单:

if (row["MAX"].ToString() != "")

甚至:

if (row["MAX"] != DBValue.Null)

我想您可能需要添加验证,然后应该使用TryParse像这样:

// Here you may handle row["MAX"] == null case, if it may happen
string MaxText = row["MAX"].ToString();

long? Max = null;
if (MaxText  != "")
{
    long value;
    if (long.TryParse(MaxText, out value))
    {
        // You may add more validation here, for example
        // to check value's range
        Max = value;
    }
}

您需要检查Empty Stringnull

在检查null您无法调用ToString() ,因为该值为nullthrows NullReferenceException

尝试这个:

long? Max = (row["MAX"] != null && !String.IsNullOrEmpty(row["MAX"].ToString()))? long.Parse(row["MAX"].ToString()) : (long?)null;

这里是:

long? val;
long parsedVal;
if (long.TryParse(row["MAX"].ToString(), out parsedVal))
{
   val = null;
}
else
{
   val = parsedVal;
}

我相信您会因为row["MAX"].ToString() != null出错。 如果row [“ MAX”]为null,则ToString()方法将引发异常。将其更改为仅row [“ MAX”]!= null(如果是数据库中的null值,请改用DBNull.Value)。

PS:您不需要使用(long?)null,因为类型为“ long?” 已经支持null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM