asp.net mvc基础准备
1.扩展方法,对别人的类加以方法扩展
当定义一个扩展方法时,第一个限制就是必须把方法定义在静态类中,因此每一个扩展方法也必须声明为静态的。第二个限制是扩展方法要用this关键字对第一个参数进行修饰,这个参数也就是我们希望进行扩展的类型。
2. 匿名方法与Lamda表达式
Func<int, string, string> MyFunc = (s, b) => { return b + s.ToString(); };
这个含义比较简单,前面2个参数代表输入参数(int,string),也就是s和b,后面{}代表方法体,一句话的就可以省掉{}
3. ?与??
?表示可空类型,例如 bool ? IsUse; 判断有值否就可用if(IsUse!=null)或IsUse.HasValue
??表示两个对象赋值时,或遇到一个null,则给予一个默认值
例: double ? balance = null;
double currentBalance;
currentBalance = balance ?? 0.0;
4.Linq表达式
(1)
书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询表达式(Query Expression)。
编译器会在程序编译时把查询表达式转换为方法语法,即对扩展方法的调用。这意味着,我们用查询表达式写出来的LINQ查询都有等价的方法语法。
string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
IEnumerable<string> query =
from n in names
where n.Contains("a") // Filter elements
orderby n.Length // Sort elements,
select n.ToUpper(); // Translate each element
IEnumerable<string> query2 = names
.Where(n => n.Contains("a")) //n直接来自names array
.OrderBy(n => n.Length) //n来自filter之后的subsequent
.Select(n => n.ToUpper());
(2)
Func<TSource,TResult>匹配TSource => TResult的Lambda表达式,接受一个输入参数TSource,返回TResult。因为TSource和TResult是不同的类型,所以我们的Lambda表达式甚至可以改变输入element的数据类型。下面的示例就把string类型元素转换为int类型元素:
static void TestSelectOperator(){
string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
// 编译器将会从Lambda表达式 n => n.Length推断出TResult为int类型
IEnumerable<int> query = names.Select(n => n.Length);
foreach (int length in query)
Console.Write(length + "|"); // 3|4|5|4|3
}
5.Razor相关语法
(1)MvcHtmlString ---Razor中只能使用MvcHtmlString,create()方法创建 HTML 编码的字符串,实际是个解码HtmlDecode
(2)TagBuilder---用来创建HTML标签,MergeAttribute用来创建属性,InnerHtml,AddCssClass
(3)HtmlHelper用来在页面上显示html元素,注意,它是基类,@Html是子类,扩展方法是用在基类上(或者HtmlHelper用在代码上,Html用在Razor语法上)