string是各种编程语言中最基础的数据类型,长期以来受尽其它类的压迫,经常被肢解(Substring、Split)、蹂躏(Join)...
而现在C#数据类型string要“翻身闹革命”了,它几乎无所不能,可以为所欲为,令其它类心惊胆颤...
让我们来看一下革命后的string做了些什么?
1. 打开文件或网址
- "c:\\t.txt".Open();
- "http://www.cnblogs.com/ldp615/".Open();
怎么做到的呢?看扩展,很简单,直接调用调用了Process.Start函数:
- public static void Open(this string s)
- {
- Process.Start(s);
- }
单单打开个文件,窃取他人信息只是初步操作,string还可以修改、删除、创建文件(或目录)
2. 文件及目录操作
- @"C:\Directory".CreateDirectory();
- @"C:\Directory\readme.txt".WriteText("this file is created by string!");
- @"C:\abc.txt".DeleteFile();
实现同样简单,调用File及Directory类。以下上面三个扩展的实现。(当然还可以实现更多文件及目录操作,很简单,不再给出!)
- public static void CreateDirectory(this string path)
- {
- Directory.CreateDirectory(path);
- }
- public static void WriteText(this string path, string contents)
- {
- File.WriteAllText(path, contents);
- }
- public static void DeleteFile(this string path)
- {
- if(File.Exists(path)) File.Delete(path);
- }
还是感觉不过瘾,想要删除整个硬盘的文件,用上面的一个一个来也太麻烦了。也没问题,看下面:
3. 执行DOS命令,先看两个简单的
- string output1 = "del c:\\t1.txt".ExecuteDOS();
- string output2 = "dir".ExecuteDOS();
实现也用了Process类,如下:
- public static string ExecuteDOS(this string cmd)
- {
- Process process = new Process();
- process.StartInfo.FileName = "cmd.exe";
- process.StartInfo.UseShellExecute = false;
- process.StartInfo.RedirectStandardInput = true;
- process.StartInfo.RedirectStandardOutput = true;
- process.StartInfo.RedirectStandardError = true;
- process.StartInfo.CreateNoWindow = true;
- process.Start();
- process.StandardInput.WriteLine(cmd);
- process.StandardInput.WriteLine("exit");
- return process.StandardOutput.ReadToEnd();
DOS命令也会有异常发生,下面的实现可通过out参数返回错误信息:
ExecuteDOS
- public static string ExecuteDOS(this string cmd, out string error)
- {
- Process process = new Process();
- process.StartInfo.FileName = "cmd.exe";
- process.StartInfo.UseShellExecute = false;
- process.StartInfo.RedirectStandardInput = true;
- process.StartInfo.RedirectStandardOutput = true;
- process.StartInfo.RedirectStandardError = true;
- process.StartInfo.CreateNoWindow = true;
- process.Start();
- process.StandardInput.WriteLine(cmd);
- process.StandardInput.WriteLine("exit");
- error = process.StandardError.ReadToEnd();
- return process.StandardOutput.ReadToEnd();
- }
有了这个扩展,格式化硬盘、关机、重启都不在话下!
- "format c:".ExecuteDOS();
- "shutdown -s".ExecuteDOS();
- "shutdown -r".ExecuteDOS();
以上对付一般用户的电脑足够了,可但对程序员的电脑,他们居然把信息放进了数据库!同样有办法!
4. 执行SQL
- DbConnection conn =
- int count = "select count(*) from Girlfriends".ExecuteScalar(conn).Cast< int>();
参考实现如下:
- public static object ExecuteScalar(this string sql, DbConnection conn)
- {
- object result;
- using (DbCommand cmd = conn.CreateCommand())
- {
- cmd.Connection = conn;
- cmd.CommandText = sql;
- cmd.CommandType = System.Data.CommandType.Text;
- conn.Open();
- result = cmd.ExecuteScalar();
- conn.Close();
- }
- return result;
- }
还有Cast扩展:
- public static T Cast< T>(this object obj)
- {
- return (T)obj;
- }
现在可以执行了。结果是*** 同样还可以实现更多数据库操作。
C#数据类型string还可以做更多更多事情,只要你支持它!但不要给它太多太大的权力,万一哪天比你强大了...
【编辑推荐】