【问题标题】:Eval how to apply or condition C#评估如何应用或条件 C#
【发布时间】:2015-01-10 17:30:05
【问题描述】:
<%# Eval("FeeStatus") == DBNull.Value OR 0 ? "UnPaid" : "Paid" %>

我只想说 IF FeeStatus 为 null 或 0 而不是 print Unpaid .. 什么是语法? 这种情况叫什么我的意思是我在网上搜索但不知道该写什么?

【问题讨论】:

  • Ternary Operator in C#
  • 相当肯定你做的比较是错误的。在or 语句中,您必须重复左侧表达式。这也不是 C# 的 or 运算符,但我不知道这是否只是一个 ASP 符号。
  • @RahulSingh 我真的不明白你想用那个评论说什么,如果 OP 真的明白了,我会感到惊讶。
  • @JeroenVannevel 它不是 ASP。除了&lt;%# %&gt; 中的所有内容都必须是有效的 C#。
  • @JeroenVannevel 在 ASP.NET 的 ASPX 页面中用于数据绑定,&lt;%#%&gt; 之间的位必须是有效的 C#(或使用的任何语言)表达式。

标签: c# asp.net


【解决方案1】:

关门但没有雪茄。

<%# Eval("FeeStatus") == DBNull.Value || (int) Eval("FeeStatus") == 0 ? "UnPaid" : "Paid" %>

<%# new object[]{ DBNull.Value, 0 }.Contains(Eval("FeeStatus")) ? "UnPaid" : "Paid" %>

C# 中没有 OR 运算符。更不用说它不清楚您希望 OR 运算符如何在布尔逻辑中工作。

哦,伙计……好吧,事实证明你想要这个可憎的东西。

<%# Eval("FeeStatus") as bool? ?? false ? "Paid" : "UnPaid" %>

【讨论】:

  • 它不检查条件只是打印付费
  • @miyanchau 可能是因为它的零类型错误。尝试 0I、Od、0m 等的变体……是小数吗?
  • 有点布尔类型
  • @miyanchau 你是在逗我吧?不管怎样,试试new object[]{ DBNull.Value, false }。其实你想要这个...&lt;%# Eval("FeeStatus") as bool? ?? false ? "Paid" : "UnPaid" %&gt;
  • 我为什么要惹你,我只是完成字符以满足发表评论的最低字符要求让我试试这个
【解决方案2】:

这可能通过创建一个辅助函数来保持可读性:

public bool IsPaid(object feeStatus) {
  return feeStatus != DBNull.Value && !(bool)feeStatus;
}

然后你可以写:

<%# !IsPaid(Eval("FeeStatus")) ? "UnPaid" : "Paid" %>

C# 没有任何原生的x == (y or z) 形式可以转换为x == y || x == z,除了只评估一次x,您需要一个辅助函数或一个辅助变量。

如果您不介意致电Eval 两次,您可以将其完整地写出来:

<%# Eval("FeeStatus") == DBNull.Value || !(bool)Eval("FeeStatus")? "UnPaid" : "Paid" %>

但这更难理解。

但是,如果您的FeeStatusDBNull.Valuefalsetrue 之一,而不是与DBNull.Valuefalse 进行比较,您可以只与true 进行比较:

<%# Eval("FeeStatus").Equals(true) ? "Paid" : "UnPaid" %>

【讨论】:

  • 感谢 hvd .. 但我不想使用它不能使用三元运算符完成的功能? ..
  • @miyanchau 已经在我的回答中添加了这一点:它更难理解,而且毫无意义地重复操作,所以我不推荐它,但是是的,你可以。
  • &lt;%# new object[]{ DBNull.Value, 0 }.Contains(Eval("FeeStatus")) ? "UnPaid" : "Paid" %&gt; 会起作用,但它的丑陋就像罪恶一样。
  • @Aron Ha,是的,您可以使用 BCL 函数而不是创建自己的函数。你甚至可以避免使用 LINQ 并使用老式的 Array.IndexOf(new object[] { DBNull.Value, 0 }, Eval("FeeStatus")) &gt;= 0 ? "Unpaid" : "Paid" :)
  • @hvd OMG 这真是个好主意!我认为您需要添加 XML 和 .ToString() :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2020-06-15
相关资源
最近更新 更多