您的位置:首页 > 编程语言 > C#

如何优雅地写代码——C#篇(2)

2014-06-06 17:52 183 查看
本篇文章包含的内容有

快速从用户输入中获取枚举值

利用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;//明显比前面的帅多了 等价于 法二中的第二种

先这样吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: