-1

这里需要一点推动。请。

我创建了一个简单的问候语,使用用户的名字和姓氏向用户问好: 但是,我添加了一个 if 语句,以便如果数据库表没有名称(名称是可选的),那么我只想显示一个问候语但没有名字:

因此,如果用户在 db 中有名称,问候语将是:早上好 Penda Bear:如果名称为空,则简单地说晚安。

但是,我仍然在问候语中得到 Null。我可以在存储过程中过滤它,但即使没有名称,我也需要数据。

注意:方法LoadProfile 只是加载数据集。

代码草稿:

public static string CreateGreeting()
{
string userFirstName = LoadProfile().Tables[0].Rows[0]["FirstName"].ToString();
string userLastName = LoadProfile().Tables[0].Rows[0]["LastName"].ToString();

Int16 intHourOfDay = Convert.ToInt16(DateTime.Now.ToString("HH"));

if ((intHourOfDay < 12) & (!string.IsNullOrEmpty(userLastName)))
{
return "Good Morning " + userFirstName + " " + userLastName;
}
else
{
return "Good Morning";
}
}

结果如下所示:Good Morning NULLL nNULL

C# 新手,对为什么即使使用IsNullOrEmpty 也会得到 null 感到困惑。我知道,因为它只是一个字符串值,但我该如何摆脱它?

4

5 回答 5

2

如果您正在获取NULL字符串(文字字符串),userLastName或者userFirstName您可能将它错误地存储在数据库中。如果LoadProfile().Tables[0].Rows[0]["FirstName"]DBNull,那么ToString()应该返回一个空字符串 ( String.Empty) 而不是文字NULL字符串。

根据Microsoft文档DBNull.ToString

返回一个空字符串 (String.Empty)。

无效的

(这并不真正适用(见下面乔伊的评论))

至于你的第二个问题:

C# 的新手,并且对为什么即使使用 IsNullOrEmpty 也会得到 null 感到困惑。我知道,因为它只是一个字符串值,但我该如何摆脱它?

您的and运营商没有按照您的意愿行事。你正在做一个bitwise and如果。你想要一个comparison/logical and&&c# 中的:

if ((intHourOfDay < 12) && (!string.IsNullOrEmpty(userLastName)))
于 2013-06-08T06:32:11.253 回答
2
var row =LoadProfile().Tables[0].Rows[0];

string? firstName = row.Field<string?>( "FirstName" );
string? lastName= row.Field<string?>( "LastName" );

if ((System.DateTime.Now.Hour < 12) && (!string.IsNullOrEmpty(lastName)))
{
     return "Good Morning " + firstName + " " + lastName;
}
else
{
      return "Good Morning";
}
于 2013-06-08T07:00:37.290 回答
0

根据常量测试您的值System.DBNull.Value。如果值等于System.DBNull.Value,则将变量的值设置为 string.empty。

此外,您还有一个错误,因为您使用的是按位与 ( &) 而不是逻辑与 ( &&)。

于 2013-06-08T06:30:42.467 回答
0

您使用的方法,即使您通过检查来解决您的问题,DBNull.Value在现实世界的应用程序中也不起作用。您应该考虑使用一些 OR/M Micro ORM 库来避免重复的 ADO.NET 管道,这总是会导致一些错误。

于 2013-06-08T06:51:07.893 回答
0

使用string.IsNullOrEmpty扩展方法作为三元语句的一部分:

return "Good morning" + string.IsNullOrEmpty(userFirstName) 
                        ? "!" 
                        : userFirstName + string.IsNullOrEmpty(userLastName) 
                                          ? string.Empty 
                                          : userLastName;

或者更高级的方法可以使您的条件逻辑变平:

return string.Format("Good {0}{1}{2} {3}"
                     , intHourOfDay < 12 ? "morning" : "evening"
                     , string.IsNullOrEmpty(userFirstName) ? "!" : " "
                     , userFirstName
                     , userLastName
                     );
于 2013-06-08T06:26:27.640 回答