1.有关简洁:web
使用#region标记代码区域,便于折叠算法
2.有关命名:编程
正 |
误 |
NumberOfArgumentsIn |
nargin |
根据含义而非类型命名设计模式
正 |
误 |
ParcelName |
strParcelName |
不要用大小写区分名称数组
抽象基类 |
-Base |
接口 |
I- |
异常 |
-Exception |
事件参数 |
-EventArgs |
事件委托 |
-EventHandler |
特性 |
-Attribute |
泛型类型参数 |
T- |
i, j, k |
循环变量(类型:System.Int32) |
o |
System.Object |
s |
System.String |
e |
事件实参(基类:System.EventArgs) |
ex |
异常(基类:System.Exception) |
g |
System.Drawing.Graphics |
x, y, z |
Lambda表达式的形参 |
3.有关字面量app
[思考题2]框架
string s = "abcdeeg"; s[5] = 'f';
以上代码在C++和C#中是否都合法?是否都有效?函数式编程
[思考题3]检测一个字符串str是否以"abc"开头,有两种方法(不使用StartsWith):函数
str.SubString(0, 3) == "abc"; str.IndexOf("abc") == 0;
请问哪一种方法好,为何? ui
CLR中的字符串是不可变类型,字符串分配是一项昂贵的操做。所以咱们有如下最佳作法:
函数式编程为C#带来了高可读性的声明式语法。循环是一种命令式语法,在声明式语法中相应的是对集合的mapping操做。
如下代码生成前100个彻底平方数:
var squares = Enumerable.Range(1, 100).Select(x => x * x);
返回int数组:squares.ToArray();
返回List<int>集合:squares.ToList();
如下代码对集合foos中每一个元素执行DoSomething()成员方法:
foos.ForEach(x => x.DoSomthing());
如下代码选出foos中大于100的元素:
var q = foos.Where(x => x > 100);
points中点按到原点距离排序:
var q = points.OrderBy(x => x.DistTo(new Point(0, 0)));
foos中平方最小的数:
double minSq = foos.Min(x => x * x); double min = foos.Distinct().Single(x => x * x == minSq);
foos中的数是否有大于100的(是否都大于100)
foos.Any(x => x > 100); foos.All(x => x > 100);
public class Tuple<T1, T2> { private T1 _item1; private T2 _item2; public T1 Item1 { get { return _item1; } } public T2 Item2 { get { return _item2; } } public Tuple(T1 item1, T2 item2) { _item1 = item1; _item2 = item2; } } public class TupleList<T1, T2> : List<Tuple<T1, T2>> { public void Add(T1 item1, T2 item2) { base.Add(new Tuple<T1, T2>(item1, item2)); } }
Button btn = new Button { Text = "Click me!", BackColor = Color.FromArgb(255, 255, 255) }; btn.Click += (sender, e) => MessageBox.Show("Hello!");
如下代码编译成相同IL:
// 1. Example Using clause: using (myConnection = new SqlConnection(connString)) { myConnection.Open(); } // 2. Example Try / Catch block: try { myConnection = new SqlConnection(connString); myConnection.Open(); } finally { myConnection.Dispose(); }
Func<Color, EventHandler> changeControlColor = x => (sender, e) => (sender as Control).BackColor = x; button1.Click += changeControlColor(Colors.Red);