第8讲:C# 运算符实战精讲:从基础运算到Razor页面中的逻辑控制
1. C#运算符基础:从加减乘除到逻辑判断
第一次接触C#运算符时,我被那些密密麻麻的符号搞得头晕眼花。直到后来在真实项目中踩过几次坑才明白,运算符就像做菜时的调味料——用对了能让代码美味可口,用错了整锅菜都得倒掉。让我们从最基础的算术运算符开始,这些符号你可能在小学数学课上就见过:
int a = 10 + 5; // 加法 → 15 int b = 10 - 5; // 减法 → 5 int c = 10 * 5; // 乘法 → 50 int d = 10 / 5; // 除法 → 2 int e = 10 % 3; // 取余 → 1但C#的运算符有些特别的小脾气。比如除法运算/,当两个操作数都是整数时,它执行的是整数除法,结果会直接截断小数部分。这就像用菜刀切西瓜,得到的永远是整块的。想要保留小数?至少得让其中一个操作数变成浮点数:
double result1 = 10 / 4; // 结果是2 double result2 = 10.0 / 4; // 结果是2.5字符串连接运算符+也是个有趣的例子。当两边都是数字时它是数学加法,但当遇到字符串时就变成了"胶水":
string combo = "结果:" + 123; // 自动转换 → "结果:123"2. 逻辑运算符与条件控制:让代码学会思考
在Razor页面开发中,逻辑运算符就像是你给代码安装的"大脑"。它们能让页面根据不同条件做出智能反应。记得我第一次用&&和||时,因为优先级问题调试了大半夜——原来逻辑运算符的运算顺序和数学里的先乘除后加减一样有讲究。
最常用的三种逻辑运算符是:
&&(与):两边都为真才返回真,像严格的门卫||(或):任意一边为真就返回真,像好说话的接待员!(非):真假反转,像爱唱反调的同事
bool isVIP = true; bool hasCoupon = false; // 组合条件判断 if(isVIP || hasCoupon) { // 满足任一条件即可进入 }在Razor页面中,这些运算符常用来控制元素的显示隐藏。比如根据用户权限显示不同内容:
@if(User.IsInRole("Admin") && showAdminPanel) { <div class="admin-tools"> <!-- 管理员专属内容 --> </div> }3. 比较运算符:数据世界的裁判员
比较运算符是条件判断的核心,它们返回的不是数字而是true或false。在用户表单验证中,这些符号就是你的"数据质检员":
int age = 25; bool isAdult = age >= 18; // true string password = "abc123"; bool isValid = password.Length > 6; // falseRazor页面中经常用它们来验证用户输入。比如注册表单的实时校验:
<input type="password" id="pwd" /> <span id="pwd-hint" style="color:red;display:none;"> 密码必须大于6位 </span> <script> document.getElementById("pwd").oninput = function(){ var isValid = this.value.length > 6; document.getElementById("pwd-hint").style.display = isValid ? "none" : "inline"; }; </script>特别注意==和=的区别,这是新手常踩的坑。单等号是赋值,双等号才是比较。在C#中比较字符串时更推荐使用Equals()方法,它能避免一些意外的引用比较问题。
4. 三元运算符:简洁的条件表达式
三元运算符?:是我最喜欢的语法糖,它能把多行的if-else压缩成一行。格式是条件 ? 真时返回值 : 假时返回值。在Razor页面中渲染动态CSS类时特别实用:
string userStatus = isActive ? "active-user" : "inactive-user";实际项目中,我常用它来设置默认值或进行简单的条件赋值。比如处理可能为null的用户名:
string displayName = string.IsNullOrEmpty(userName) ? "游客" : userName;但要注意别过度使用,嵌套的三元运算符会让代码难以阅读。当条件逻辑比较复杂时,还是老老实实用if-else更清晰。
5. 运算符优先级:谁先谁后的规则
运算符优先级就像交通规则,决定了谁先执行谁后执行。我曾因为忽略优先级导致过一个严重的计算bug——发票金额总是少算了一部分。常见的优先级从高到低是:
()括号!、++、--等一元运算符*、/、%+、->、<、>=、<===、!=&&||
当你不确定顺序时,最简单的方法就是加括号。比如下面这两个表达式结果完全不同:
bool result1 = true || false && false; // true bool result2 = (true || false) && false; // false6. Razor页面中的运算符实战
现在让我们把这些运算符知识应用到Razor页面开发中。假设我们要做一个智能折扣计算器:
@{ double price = 100; bool isMember = true; int memberLevel = 3; bool hasPromoCode = true; // 复合条件判断 double discount = 0; if(isMember && memberLevel > 1) { discount += 0.1; // 高级会员基础折扣 } discount = hasPromoCode ? discount + 0.05 : discount; double finalPrice = price * (1 - discount); } <div class="price-calculation"> <p>原价: @price.ToString("C")</p> <p>折扣: @(discount * 100)%</p> <p class="final-price">最终价格: @finalPrice.ToString("C")</p> </div>在这个例子中,我们综合运用了算术运算符、比较运算符和逻辑运算符。@()是Razor中的表达式输出语法,它能直接计算并输出C#表达式的结果。
7. 避免常见运算符陷阱
在多年开发中,我总结了一些容易出错的运算符使用场景:
整数除法陷阱:
1/2结果是0而不是0.5,解决方法是至少让一个操作数变成浮点型:1.0/2字符串与数字相加:
"1" + 2结果是"12"而不是3,需要先转换类型:int.Parse("1") + 2浮点数比较:不要直接用
==比较浮点数,应该比较差值是否小于某个极小值:double a = 0.1 + 0.2; bool equal = Math.Abs(a - 0.3) < 0.000001; // true逻辑运算符短路:
&&和||会短路求值,右边的表达式可能不会执行:if(obj != null && obj.Value > 10) // 安全访问自增运算符位置:
i++和++i在复杂表达式中的结果不同:int i = 1; int j = i++ + 5; // j=6, i=2 int k = ++i + 5; // k=8, i=3
8. 综合案例:构建智能用户卡片
让我们用前面学到的所有知识,在Razor页面中创建一个能根据用户状态自动调整样式的用户信息卡片:
@{ var user = new { Name = "张三", Age = 25, IsVIP = true, LastLoginDays = 2, Credit = 1500 }; string cardClass = user.IsVIP ? "vip-card" : "normal-card"; string status = user.LastLoginDays <= 7 ? "活跃用户" : "不活跃用户"; string discountInfo = user.Credit > 1000 ? $"可享受{(user.IsVIP ? 15 : 10)}%折扣" : "暂无折扣"; } <div class="@cardClass"> <h3>@user.Name</h3> <p>年龄: @user.Age</p> <p>状态: @status</p> <p>积分: @user.Credit</p> <p class="highlight">@discountInfo</p> @if(user.IsVIP && user.LastLoginDays <= 3) { <div class="special-offer"> <p>专属特权: 免费送货!</p> </div> } </div> <style> .vip-card { background-color: gold; padding: 15px; } .normal-card { background-color: silver; padding: 10px; } .highlight { font-weight: bold; color: red; } .special-offer { margin-top: 10px; padding: 5px; background-color: green; color: white; } </style>这个例子展示了如何将各种运算符灵活组合,根据业务逻辑动态生成页面内容。通过合理使用运算符,我们让页面具备了智能判断和个性化展示的能力。
