如何优雅地写代码——C#篇(2)
2014-06-06 17:52
183 查看
本篇文章包含的内容有
快速从用户输入中获取枚举值
利用using定义长命名空间的别名
使用Dictionary解析命令行参数
LINQ 和 LINQ for XML
使用ConditionalAttribute()
优雅地处理可空类型
1.快速从用户输入中获取枚举值
经常要用到枚举,并且常常要从用户输入的字符串中获取 = =
2B的写法是这样的
文艺的写法是这样的
2.利用using定义长命名空间的别名
不解释了
3.使用Dictionary解析命令行参数
用到了反射
看看栗子你就懂了
4.LINQ 和 LINQ for XML
这只是一个简单的LINQ实例 具体请百度
5.使用ConditionalAttribute创建代码
先说明这个ConditionalAttribute是做什么用的
ConditionalAttribute位于System.Diagnostics中
当有预定义常量时就编译这个Attribute附着的东西
例子
当用debug编译配置编译时 输出为
当用release编译配置编译时 没有输出
6.优雅地处理可空类型
可用类型是指除了值类型外 还可以有null值
比如
那么应该怎样处理可空类型呢?
法一 强制转换 (不推荐)
法二 判断 (太长了 不够优雅 不推荐)
请原谅我复制了MSDN的实例
法三 使用??运算符
先这样吧
快速从用户输入中获取枚举值
利用using定义长命名空间的别名
使用Dictionary解析命令行参数
LINQ 和 LINQ for XML
使用ConditionalAttribute()
优雅地处理可空类型
1.快速从用户输入中获取枚举值
经常要用到枚举,并且常常要从用户输入的字符串中获取 = =
2B的写法是这样的
var userInput = "Monday"; var dayEnum = new DayEnum(); switch (userInput) { case "Monday": dayEnum = DayEnum.Monday; break; //... //etc. }
文艺的写法是这样的
var userInput = "monday"; var dayEnum = (DayEnum)Enum.Parse(typeof(DayEnum), userInput, true);
2.利用using定义长命名空间的别名
不解释了
using my = System.IO;
3.使用Dictionary解析命令行参数
用到了反射
看看栗子你就懂了
class Program { static void Main(string[] args) { var userInput = "a"; var argdict = new Dictionary { { "a", "Method1" }, { "b", "Method2" }, { "c", "Method3" } }; typeof(Program).InvokeMember(argdict[userInput], BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null); } public static void Method1() { Console.WriteLine("m1"); } public static void Method2() { Console.WriteLine("m2"); } public static void Method3() { Console.WriteLine("m3"); } }
4.LINQ 和 LINQ for XML
这只是一个简单的LINQ实例 具体请百度
var list = new int[] { 5, 1, 2, 3, 5, 498, 87 }; var query = from x in list where x > 2 //条件 orderby x //从小到大排序 从大到小为 orderby x descending select x; //结果返回x foreach (var i in query) { Console.WriteLine(i); } Console.ReadKey();
var xdoc = XDocument.Parse( "" + "George" + "John" + "Reminder" + "Don't forget the meeting!" + ""); var query = xdoc.Descendants().Select(x => { var xTo = x.Element("to"); var xFrom = x.Element("from"); if (xTo != null && xFrom != null) return new { _to = xTo.Value, _from = xFrom.Value }; return null; }); foreach (var i in query) if (i != null) Console.WriteLine(i); Console.ReadKey();
5.使用ConditionalAttribute创建代码
先说明这个ConditionalAttribute是做什么用的
ConditionalAttribute位于System.Diagnostics中
当有预定义常量时就编译这个Attribute附着的东西
例子
static void Main() { Method1(); Method2(); Console.ReadKey(); } [Conditional("DEBUG")] static void Method1() { Console.WriteLine("m1"); } [Conditional("ELSE")] static void Method2() { Console.WriteLine("m2"); }
当用debug编译配置编译时 输出为
m1
当用release编译配置编译时 没有输出
6.优雅地处理可空类型
可用类型是指除了值类型外 还可以有null值
比如
int? i = null; //i = null i = 123; //现在i = 123
那么应该怎样处理可空类型呢?
法一 强制转换 (不推荐)
int? i = null; var a = (int)i;//WRONG!! 值类型不能为null
法二 判断 (太长了 不够优雅 不推荐)
请原谅我复制了MSDN的实例
int? x = 10; if (x.HasValue) { System.Console.WriteLine(x.Value); } else { System.Console.WriteLine("Undefined"); } //或者 int? x = 10; if (x != null) { System.Console.WriteLine(x.Value); } else { System.Console.WriteLine("Undefined"); }
法三 使用??运算符
int? i = null; var a = i ?? 0;//明显比前面的帅多了 等价于 法二中的第二种
先这样吧
相关文章推荐
- 如何优雅地写代码——C#篇(1)
- 如何写优雅的代码(1)——灵活使用goto和__try
- 如何写优雅的代码(2)——#define?const?还是enum?
- 如何写优雅的代码(5)--不一样的类用法
- 如何写优雅的代码(1)——灵活使用goto和__try
- 如何写优雅的代码(2)——#define?const?还是enum?
- 如何写优雅的代码(序)——自语
- 《我的编程笔记》C#篇-如何让一段代码自我复制
- 如何写优雅的代码(5)--不一样的类用法
- 如何写优雅的代码(5)——远离临界区噩梦
- 如何写优雅的代码(2)——#define?const?还是enum?
- 如何写优雅的代码(2)——#define?const?还是enum?
- 如何写优雅的代码(3)——合理选择函数形参
- 如何写优雅的代码(序)——自语
- 如何写优雅的代码(5)--不一样的类用法
- 如何写优雅的代码(4)——简单有效地玩转线程
- 如何写优雅的代码(1)——灵活使用goto和__try
- 如何写优雅的代码—#define?const?还是enum?
- 如何写优雅的代码(2)——#define?const?还是enum?
- 如何写优雅的代码(4)——简单有效地玩转线程