int.TryParse非预期执行引发的思考 ASP.NET -- WebForm -- 给图片添加水印标记 Windows -- 使用批处理文件.bat删除旧文件...
int.TryParse非预期执行引发的思考
问题出现
这天在写一个页面,想谨慎些就用了int.TryParse
,结果出问题了。
代码如下:
int id = 1000;
//Request.QueryString["id"] = null
int.TryParse( Request.QueryString["id"], out id ); //使用 id 进行其他操作...
因为Request.QueryString["id"] = null
,所以我的预期是id=1000
。可是我错了,实际结果是id=0。测试多次都是这样。我感觉要出事了。
事实上我对TryParse一直存在这么个认知(以上面代码举例):
- 如果转换成功,id=转换后的值;
- 如果转换失败,不进行任何操作,id仍然是1000。
可是现在我知道我错了,更严重的是我按照这样的思维写了不少代码。。。还好我确保输入正确使其都能转化成功,至今没出什么幺蛾子。出幺蛾子的话我早就滚蛋了吧。
不过现在不是考虑这些的时候,工作要紧,就赶紧改了代码,先把新功能上线了再说...
问题分析
几天后,有空了,就开始研究这个问题,总结如下:
TryParse
转换失败时,out参数
返回的是什么?
网上搜了下,在stackoverflow上看到了这么一段话(谷歌翻译):
你是对的,如果失败,TryParse使用0。(MSDN非常清楚地说明了这一点)但你可以检查paseSuccess并返回你的默认值,如果这是你想要的。
现在发现当时看的是VB.NET...还好此时此刻这货特性和C#是一样的...不然又坑了...
既然提到了MSDN,那就去看看。果然,MSDN上在result
处写着这么一段话:
result
Int32
当此方法返回时,如果转换成功,则包含与s
中所包含的数字等效的 32 位无符号整数值;如果转换失败,则包含零。 如果s
参数为null
或为 Empty、格式不正确,或者表示小于 MinValue 或大于 MaxValue 的数,则转换失败。 此参数未经初始化即进行传递;最初在result
中提供的任何值都会被覆盖。
有这么几处重点:
- 当此方法返回时,如果转换成功,则包含与
s
中所包含的数字等效的 32 位无符号整数值;如果转换失败,则包含零。 - 此参数未经初始化即进行传递;最初在
result
中提供的任何值都会被覆盖。
”out参数“、“未经初始化即进行传递”,看到这些,我突然想到了out
参数的特性:“out
参数好像是不需要初始化的“。如果传入时不需要初始化,那么在TryParse方法内部,当转换成功时可以赋值(转换后的值);当转换失败时,也必须赋值,要赋值就必定是默认值。
到此我的疑惑已经解开了。搞了大半天,竟然是out关键字
的性质。恍然大悟的同时,又感觉到自己的C#基础的薄弱。。。
总结
TryParse
使用时,传入的out
参数的原始值会被覆盖掉,具体如下:
- 如果转换成功,使用转换成功后的值覆盖
- 如果转换失败,使用该类型的默认值覆盖
其他
转换失败时不使用默认值覆盖原始值的2种方法
既然已经了解了本质,当然也不能忘了咱们的初衷,那就是TryParse转换失败时,怎么不使用默认值覆盖我们设定的原始值?
下面分享一下在stackoverflow上看到的2种方法
//方法1、使用out参数的性质
int i = int.TryParse(s, out i) ? i : 42; //方法2、扩展方法 public class Extensions { public static int? TryParse(string this Source) { if(int.tryparse .... } } //使用 v = "234".TryParse() ?? 0
out
关键字和ref
关键字的区别
说到out
关键字,就不得不提ref
关键字,他们之间的区别是什么呢?
额,这个稍后我会再写一篇博文的,到时候此处会贴上链接,敬请期待...
参考
- SF:https://stackoverflow.com/questions/1078512/why-does-integer-tryparse-set-result-to-zero-on-failure?noredirect=1&lq=1
- SF:https://stackoverflow.com/questions/10693231/elegant-tryparse
- MSDN:Int32.TryParse Method
ASP.NET -- WebForm -- 给图片添加水印标记
ASP.NET -- WebForm: 给图片添加水印标记
ASP.NET:使用 WebForm(C#) 制作一个简单的为图片添加水印的页面。
1. Test2.aspx文件
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test2.aspx.cs" Inherits="Test2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"><title></title> </head> <body><form id="form1" runat="server"><div><asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="Button1" runat="server" Text="上传" οnclick="Button1_Click" /> 水印文字:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button2" runat="server" Text="添加水印" οnclick="Button2_Click" /><br /><asp:Image ID="Image1" runat="server" /><asp:Image ID="Image2" runat="server" /></div></form> </body> </html>
2. Test2.aspx.cs文件
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Drawing;public partial class Test2 : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e){}protected void Button1_Click(object sender, EventArgs e){//上传图片并保存HttpPostedFile imgfile = Context.Request.Files[0];imgfile.SaveAs(Context.Request.MapPath("image/TestImg.jpg"));Image1.ImageUrl = "./image/TestImg.jpg";}protected void Button2_Click(object sender, EventArgs e){//创建位图,位图来自image文件using (Bitmap map = (Bitmap)Bitmap.FromFile(Context.Request.MapPath("image/TestImg.jpg"))){using (Graphics g=Graphics.FromImage(map)){//画水印文字在位图上g.DrawString(TextBox1.Text, new Font("黑体", 14.0f, FontStyle.Bold), Brushes.Blue, new PointF(map.Width - 120, map.Height - 30));//将画好水印文字的位图保存map.Save(Context.Request.MapPath("image/TestImg2.jpg"));}}Image2.ImageUrl = "./image/TestImg2.jpg";} }
3. 实现结果
(1) 上传要添加水印的图片
(2) 输入水印文字
(3) 添加水印在图片上
Windows -- 使用批处理文件.bat删除旧文件
Windows -- 写一个批处理文件.bat删除旧文件
1. 批处理文件 del_old_file.bat
rem 删除D:\temp目录下7天前的文件 Forfiles /p D:\temp /s /d -7 /m *.* /c "cmd /c del /q /f @path"rem 删除C:\inetpub\logs目录下14天前的文件 Forfiles /p C:\inetpub\logs /s /d -14 /m *.* /c "cmd /c del /q /f @path"
2. 各参数的含义
rem: 注释命令,只是起一个注释的作用
/p:指定要删除的目录
/s:表示递归搜索子目录
/d:-14表示14天前的文件,-7表示7天前的文件
/m:*.* 表示所有文件类型,如果要删除特定文件格式,可自行指定(如:只删除txt文件,可写成 *.txt )
/c:自行指定的命令,后面双引号括起来的是删除文件命令
自行指定的命令 "cmd /c del /q /f @path" 中:
/c: 表示执行完批处理命令后,关闭CMD窗口
del: 删除文件的命令
/q: 安静模式。删除全局通配符时,不要求确认
/f: 强制删除只读文件。
3. 使用方式及会用到的地方
使用方式:可以在Windows任务计划程序中,创建定时任务来执行该批处理文件(如:每天什么时间执行、执行频率......)。
会用到的地方:用于删除占用资源且没有用的文件,可用于定时删除服务器上的很久以前的临时文件、IIS服务器log......
优点:只需简单几行命令,完成设定来实现目的是比较快的。
int.TryParse非预期执行引发的思考 ASP.NET -- WebForm -- 给图片添加水印标记 Windows -- 使用批处理文件.bat删除旧文件...相关推荐
- int.TryParse非预期执行引发的思考
问题出现 这天在写一个页面,想谨慎些就用了int.TryParse,结果出问题了. 代码如下: int id = 1000; //Request.QueryString["id"] ...
- sql int 转string_由String引发的思考
最近在研究GO语言,其中提到 字符串就是一串固定长度的字符连接起来的字符序列.则由此产生联想,在JVM中String的长度限制是多少?而且在实际应用(智慧社区)中也遇到过相似场景:前端同学将图片转码成 ...
- 由「Metaspace容量不足触发CMS GC」从而引发的思考
转载自 由「Metaspace容量不足触发CMS GC」从而引发的思考 某天早上,毛老师在群里问「cat 上怎么看 gc」. 好好的一个群 看到有 GC 的问题,立马做出小鸡搓手状. 之后毛老师发来 ...
- 一个小程序引发的思考
既然是一个小程序引发的思考,那么我们就先看看这个小程序,看看他有何神奇之处: namespace ConsoleApplication1 {class Program{static void Main ...
- 【汇编语言与计算机系统结构笔记01】x86/MIPS/ARM指令集概述与特性,一篇HPCA引发的思考(商业生态的决定性作用)
资源Bilibili AV46914471 + AV57921488 汇编语言与计算机系统结构 清华大学 张悠慧 本次笔记内容: 01.汇编语言与计算机系统结构 02.汇编基础知识--指令集综述 文章 ...
- 一个分组查询引发的思考
一个分组查询引发的思考 我们在看项目代码或者SQL语句时, 往往会看到很多非常复杂的业务或者SQL 那么问题来了. 复杂SQL是如何写成的? 下面通过一个数据展示的需求来体会到复杂的SQL是如何书写的 ...
- C语言关于微生物增殖(假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次......)引发的思考---解题神器(三点一测法)
C语言 关于微生物增殖(假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次-引发的思考 程序之美 题目描述 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分 ...
- C#中 int.TryParse 的用法
int i = -1; bool b = int.TryParse(null, out i); 执行完毕后,b等于false,i等于0,而不是等于-1,切记. int i = -1; bool b = ...
- JAVA-OPTS引发的思考
JAVA-OPTS引发的思考 我们在性能测试过程中,经常要修改应用的JAVA-OPTS参数.修改这些参数,不单单是修改这些数字,本着知其所以然的态度,我们要知道这些参数背后的意义. 常见的JAVA-O ...
最新文章
- 13.挂载点、文件系统、磁盘的命名、分区的命名
- 使用python处理子域名爆破工具subdomainsbrute结果txt
- CentOS中怎样安装mysql并修改密码、设置开机启动、配置远程连接
- Linux:进程实例信息(/proc)
- DAY5-小别-2018-1-15
- C++走向远洋——63(项目二2、两个成员的类模板)
- 全向轮机器人运动模型及应用分析
- html5d调用百度语音,易语言调用百度语音平台实现文字转换语音功能的代码
- torch-1.6.0+cu92-cp38-cp38-linux_x86_64.whl is not a supported wheel on this platform.
- idea设置背景颜色护眼色
- 【第158期】游戏策划:给@zhang的简历分析
- 马哥python培训班靠谱吗
- 激光雷达RPLidar的配置(arduino和rasberrypi)
- bilibili视频批量下载
- 总结10个Python赚钱的接单平台 兼职月入5000+
- Blender插件开发:bpy.utils模块
- 整理《我三年开发经验,从字节跳动抖音组离职后,一口气拿到15家公司Offer》
- 优秀的图文识别开源项目PandaOCR
- 移动通讯中的2G和2.5G以及3G概念
- 有一种感觉叫清风细雨
热门文章
- #并行优化# 容错算法 (Fault Tolerant)
- ubuntu下定时执行工具cron开启关闭重启
- 只安装了JRE,没有手动配置环境变量,eclipse跑不起来,Exit code = -1
- YY一下IT业的未来
- 图论算法(四)--最小生成树的Kruskal [ 加边 ] 、Prim [ 加点 ] 的解法(JAVA)
- 关于eclipse web项目认不到用户库的问题
- oracle job定时报错,Oracle Job定时任务的使用详解
- c语言自定义一个函数求商和余数,c – 如何在一个步骤中获得商和余数?
- 数据结构的基本概念和抽象数据类型
- 2022年百度新能源汽车行业洞察