第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; // 自动转换 → 结果1232. 逻辑运算符与条件控制让代码学会思考在Razor页面开发中逻辑运算符就像是你给代码安装的大脑。它们能让页面根据不同条件做出智能反应。记得我第一次用和||时因为优先级问题调试了大半夜——原来逻辑运算符的运算顺序和数学里的先乘除后加减一样有讲究。最常用的三种逻辑运算符是与两边都为真才返回真像严格的门卫||或任意一边为真就返回真像好说话的接待员!非真假反转像爱唱反调的同事bool isVIP true; bool hasCoupon false; // 组合条件判断 if(isVIP || hasCoupon) { // 满足任一条件即可进入 }在Razor页面中这些运算符常用来控制元素的显示隐藏。比如根据用户权限显示不同内容if(User.IsInRole(Admin) showAdminPanel) { div classadmin-tools !-- 管理员专属内容 -- /div }3. 比较运算符数据世界的裁判员比较运算符是条件判断的核心它们返回的不是数字而是true或false。在用户表单验证中这些符号就是你的数据质检员int age 25; bool isAdult age 18; // true string password abc123; bool isValid password.Length 6; // falseRazor页面中经常用它们来验证用户输入。比如注册表单的实时校验input typepassword idpwd / span idpwd-hint stylecolor: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 classprice-calculation p原价: price.ToString(C)/p p折扣: (discount * 100)%/p p classfinal-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; // j6, i2 int k i 5; // k8, i38. 综合案例构建智能用户卡片让我们用前面学到的所有知识在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 classcardClass h3user.Name/h3 p年龄: user.Age/p p状态: status/p p积分: user.Credit/p p classhighlightdiscountInfo/p if(user.IsVIP user.LastLoginDays 3) { div classspecial-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这个例子展示了如何将各种运算符灵活组合根据业务逻辑动态生成页面内容。通过合理使用运算符我们让页面具备了智能判断和个性化展示的能力。