如何优雅地写代码——C#篇(2)
本篇文章包含的内容有
- 快速从用户输入中获取枚举值
- 利用using定义长命名空间的别名
- 使用Dictionary解析命令行参数
- LINQ 和 LINQ for XML
- 使用ConditionalAttribute()
- 优雅地处理可空类型
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;//明显比前面的帅多了 等价于 法二中的第二种
先这样吧

浙公网安备 33010602011771号