C#中逻辑运算符的结构#
我的查询很简单,如果可能的话,在C#中执行以下操作。C#中逻辑运算符的结构#
<html>
<head>
<script src="../jquery-1.3.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$("#datos").append("<span style=\"font-weight:bold\">(false || null || \"1º\" || \"2º\")</span> : <span>"+(false || null || "1º" || "2º")+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(false && null || false || \"2º\")</span> : <span>"+(false && null || false || "2º")+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(false && true || \"1º\" || \"2º\")</span> : <span>"+(false && true || "1º" || "2º")+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(true && null && 6 && 5)</span> : <span>"+(true && null && 6 && 5)+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(null && true && false && false)</span> : <span>"+(null && true && false && false)+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(false && true && false && false)</span> : <span>"+(false && true && false && false)+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(true && 1 && true && 2)</span> : <span>"+(true && 1 && true && 2)+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(true && \"1º\" && true && \"2º\")</span> : <span>"+(true && "1º" && true && "2º")+"</span><br />");
$("#datos").append("<span style=\"font-weight:bold\">(true && true && \"1º\" && \"2º\")</span> : <span>"+(true && true && "1º" && "2º")+"</span><br />");
});
</script>
</head>
<body>
<div id="datos"></div>
</body>
</html>
返回HTML:
(false || null || "1º" || "2º") : 1º
(false && null || false || "2º") : 2º
(false && true || "1º" || "2º") : 1º
(true && null && 6 && 5) : null
(null && true && false && false) : null
(false && true && false && false) : false
(true && 1 && true && 2) : 2
(true && "1º" && true && "2º") : 2º
(true && true && "1º" && "2º") : 2º
谢谢。
- 编辑评论
我需要完成在C#中的以下内容:
string value1 = string.Empty;
string value2 = "default value";
// Request.Form["valueA"] and Request.Form["valueB"] may be null
value1 = (Request.Form["valueA"] || Request.Form["valueB"] || value2);
这些表达式是无效的C#,因为.NET ||
和&&
运营商是强类型。
有,然而,在x ?? y
操作返回y
如果x
是null
和x
否则:
string value1;
string value2 = "default value";
value1 = Request.Form["valueA"] ?? Request.Form["valueB"] ?? value2;
^ ^
+1。但是如果url包含“?valueA =&valueB = Hello”会发生什么?;) – AnthonyWJones 2009-08-28 14:32:30
@Anthony什么都不会发生一个字符串“”不影响? nor和变量 – 2009-08-28 14:41:27
编辑:和=任何 – 2009-08-28 14:42:03
如果我理解你的“问题”正确,你要明白,C#手柄输入更加严格的方式。空值不会被视为false,事实上,您可以在布尔表达式中使用的唯一类型是布尔值,与JavaScript不同,它将接受任何类型的布尔表达式并对其含义进行一些合理的猜测。
唯一接近你在JavaScript中做的操作符是? : -
var r1 = (null ?? "1º" ?? "2º") // Results in 1º
var r2 = (null ?? null ?? "2º") // Results in 2º
但是这并不起作用: -
var r1 = (null ?? 1 ?? 2) //Compile error
整数是值类型,并且不能为空。
解决方案编辑
每当有使用前我掖了这一切的属性里面查询字符串/表单值的“来料加工”的异样。 (事实上,我倾向于把所有这样的访问放在一个属性中,即使它只是{return Request.QueryString["stuff"]; }
)。
string _Value;
public string Value
{
get
{
if (_Value == null)
{
_Value = CoalesceNullOrEmpty(Request.Form["valueA"],
Request.Form["valueB"],
"Default Value");
}
}
return _Value;
}
}
//Can place this in the page but is more useful in a utility dll
public string CoalesceNullOrEmpty(params string[] values)
{
foreach(string value in values)
if (!String.IsNullOrEmpty(value))
return value;
return null;
}
现在使用Value属性,您将使用value1属性。
如果你想要一系列布尔,为什么不写一个能为你转换的类,应用你想要的规则。如果你的规则是“如果它是空的,它是假的;如果它是非空的,它是布尔值,否则它是真的”,那么这种方法适用于你。
static List<bool> ToBool(FormCollection form) { // couldn't find the type on MSDN
List<bool> result = new List<Bool>();
foreach (object o in form) {
if (o == null) {
result.Add(false);
}
else {
if (o is bool) {
result.Add((bool)o);
}
else {
// do whatever other conversion
result.Add(true); // probably the wrong thing - depends on what you're testing
}
}
}
return result;
}
我不知道你在问什么...... – RedFilter 2009-08-28 14:10:23
究竟是什么问题? – 2009-08-28 14:11:24
问题是什么'(false || null ||“1º”||“2º”)'评估在C#中。答案是它不能编译,因为C#布尔运算符是强类型的。但我认为知道是否有一种方法可以在C#中编写类似的方法会很有趣...... – dtb 2009-08-28 14:13:36