检查字符串是否为空或null,并用另一个字符串替换

3
在这里,如果 AvailCode 为空字符串或 null,则需要显示“暂时不可用”。但是我的编程并没有显示它。 (只考虑 Avail Code)。
var _staff = trv.GetBookDetails("4500").Select(b => new
{
    value = b.bookno,
    text =  b.bookname + " " + "/"+" " + b.AvailCode ?? "TemporaryUnavailable",  
});

1
text = String.Format("{0} / {1}", b.bookname, String.IsNullOrEmpty(b.AvailCode) ? "TemporaryUnavailable" : b.AvailCode); - Dmitry Bychenko
上面的注释代码也可以工作。 - TechGuy
3个回答

6

运算符 ?? 仅处理 NULL 情况,而不是空情况。

替换

b.AvailCode ?? "TemporaryUnavailable"

使用

string.IsNullOrEmpty(b.AvailCode)? "TemporaryUnavailable" : b.AvailCode

因此,正确的代码应该是:

text = b.bookname + " / " + (string.IsNullOrEmpty(b.AvailCode) ? "TemporaryUnavailable" : b.AvailCode),

它显示了一个错误:“无法将类型bool隐式转换为string”。 - TechGuy
将检查项包裹在 ( ) 内,例如 (string.IsNullOrWhitespace(b.AvailCode) ? "TemporaryUnavailable" : b.AvailCode) - Irshad

2
??”运算符被称为null合并运算符,如果左操作数不为null,则返回左操作数;否则返回右操作数。

它不会检查是否为空;

请使用string.IsNullOrWhitespace方法。

string.IsNullOrWhitespace(b.AvailCode) ? "TemporaryUnavailable" : b.AvailCode

1

?? 运算符的优先级非常低,它在左侧的 + 运算符之后进行计算。因此,您永远无法在左侧获得真正的 null。您需要将其括在括号中:

  text =  b.bookname + " " + "/"+" " + (b.AvailCode ?? "TemporaryUnavailable"),  

或者,如果您想处理空值: ```html

```
  text =  b.bookname + " " + "/"+" " + (string.IsNullOrEmpty(b.AvailCode) ? "TemporaryUnavailable" : b.AvailCode),  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接