1:泛型
http://msdn.microsoft.com/zh-cn/library/system.collections.generic(VS.80).aspx
// type parameter T in angle brackets public class GenericList<T> { // The nested class is also generic on T private class Node { // T used in non-generic constructor public Node(T t) { next = null; data = t; } private Node next; public Node Next { get { return next; } set { next = value; } } // T as private member data type private T data; // T as return type of property public T Data { get { return data; } set { data = value; } } } private Node head; // constructor public GenericList() { head = null; } // T as method parameter type: public void AddHead(T t) { Node n = new Node(t); n.Next = head; head = n; } public IEnumerator<T> GetEnumerator() { Node current = head; while (current != null) { yield return current.Data; current = current.Next; } } } ——————————————————————
class TestGenericList { static void Main() { // int is the type argument GenericList<int> list = new GenericList<int>(); for (int x = 0; x < 10; x++) { list.AddHead(x); } foreach (int i in list) { System.Console.Write(i + " "); } System.Console.WriteLine("/nDone"); } }
下面涉及到了反射!!!
public virtual object getValue(T t, string valueName) { object ret=default(object); System.Reflection.PropertyInfo property = t.GetType().GetProperty(valueName); if (property == null) return null; ret=t.GetType().InvokeMember(valueName,System.Reflection.BindingFlags.GetProperty,null,t,new object[]{}); return ret; }
public virtual void setValue(T t, string valueName,string val) { System.Reflection.PropertyInfo property = t.GetType().GetProperty(valueName); if (property == null) return; val = "001"; t.GetType().InvokeMember(valueName, System.Reflection.BindingFlags.SetProperty, null, t, new object[] { val }); }
public virtual object getValue(T t, string valueName) { object ret = default(object); System.Reflection.MemberInfo[] member = t.GetType().GetMember(valueName); if (member == null) return null; ret = t.GetType().InvokeMember(valueName, System.Reflection.BindingFlags.GetField, null, t, new object[] { }); return ret; }
public virtual void setValue(T t, string valueName, string val) { System.Reflection.MemberInfo[] member = t.GetType().GetMember(valueName); if (member == null) return; t.GetType().InvokeMember(valueName, System.Reflection.BindingFlags.SetField, null, t, new object[] { val }); }
2:?与??
*变量定义中含有一个问号,意思是这个数据类型是NullAble类型的。 *变量定义中含有两个问号,意思是取所赋值??左边的,如果左边为null,取所赋值??右边的。
cred.adaptorName = WebConfigurationManager.AppSettings["LDAPAdaptor"] ?? "Domestic";
3:public ItemMapping(Control target, String boundproperty, String targetproperty) : this(target, boundproperty, targetproperty, null, null)这里的:表示继承,只能用于构造函数。 { }
public ItemMapping(Control target, String boundproperty):this(target, boundproperty,null,null,null) {这里的:表示继承,只能用于构造函数。 } public ItemMapping(Control target, String boundproperty, String targetproperty, String format, ICustomFormatter formatter) { if (target == null) throw new ArgumentNullException("target"); if (boundproperty == null) throw new ArgumentNullException("boundproperty");
this.mTarget = target; this.mBound = boundproperty; this.mTgtProp = targetproperty; this.mFormat = format; this.mFormatter = formatter; }
4:string.Format("Service Url:{0}", “aaabbbccc”)
相当于:"Service Url:aaabbbccc"
5:
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> <triggers> <asp:AsyncPostBackTrigger ControlID="RadioButtonList1" EventName="SelectedIndexChanged"></asp:AsyncPostBackTrigger> <asp:AsyncPostBackTrigger ControlID="Search1" EventName="Click"></asp:AsyncPostBackTrigger> <asp:AsyncPostBackTrigger ControlID="Search" EventName="Click"></asp:AsyncPostBackTrigger> </triggers> </asp:UpdatePanel>
微软自带的ajax控件:Ajax Extensions。把你所需要异步update的区域用updatepanel包起来,然后设置哪些trigger可以影响这个panel。另外还需要ScriptManager这个控件。
注意;先创建一个Ajax Website(装AJAX时会装上ScriptManager的)
6:if (lst == null) throw new ArgumentNullException("lst"); throw,哈哈!