VS2008新特性

来源:互联网 发布:淘宝商城检测报告 编辑:程序博客网 时间:2024/05/09 16:57
如果此附件中有图片,将无法显示。  下载原始附件

 

VS2008新特性

  • 简单介绍及体会
  1. 把Ajax extension集成到了Visual studio2008中;
  1. JS 智能感知;
    如在编辑页面加入如下语句,则编辑器就支持JQuery智能提示

       <script src="JqueryIntellisense/jquery-1.2.6.js" type="text/javascript"></script>

       <%if(false)

      { %><script src="JqueryIntellisense/jquery-1.2.6-vsdoc.js" type="text/javascript"></script>  <%} %>

 
  1. LINQ(Language Integrated Query);

    体会:在操作Objects,Sql,Xml,Entities,DateSets时,使用Linq是非常方便的;部分代码如下:

    string[] array = {"wis","dd","aa","ad" };

    IEnumerable<string> res = from s in array where s.StartsWith("a") orderby s select s;

    foreach(string r in res)

    {

       Console.WriteLine(r);

    }

 
  1. Var 隐式类型;

    注:隐式本地变量的声明必须同时包含一个初始化器。

  1. 自动的属性,可以在编译的时候,生成private data field;
  2. 扩展方法:可以为编译好的程序集动态的添加方法;

      体会:必须是static类+static方法;只有且有第一个参数必须用this。

    以下是一个Json对象转换的类:

    namespace LSHI.JsonHelper

    {

        public static class OperatorJson

        {

            public static string ToJSON(this object obj)

            {

                DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());

                using (MemoryStream ms = new MemoryStream())

                {

                    serializer.WriteObject(ms, obj);

                    return Encoding.Default.GetString(ms.ToArray());

                }

            } 

            public static T ParseJSON<T>(this string str)

            {

                T obj = Activator.CreateInstance<T>();

                using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(str)))

                {

                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());

                    return (T)serializer.ReadObject(ms);

                }

            }

        }

    }

    使用如下:

    IList<User> listUser = new List<User>

                {

                    new User{UserID="1001",UserName="shilin1",UserAge=10},

                    new User{UserID="1002",UserName="shilin2",UserAge=20},

                    new User{UserID="1003",UserName="shilin3",UserAge=30}

                };

                string str = listUser.ToJSON();

                IList<User> obj = str.ParseJSON<List<User>>();

 
  1. 扩展接口;
    项目中有些对象经常需要重置部分或全部属性到初始状态,想给这些类全部都加上个Reset()方法,又显得太冗余,如果利用扩展接口就显得很容易。代码如下:

    先定义一个接口:

    public interface IResetable { }

    扩展这个接口:

    public static class ResetableImpl

        {

            public static void Reset(this IResetable obj)

            {

                var ctor = obj.GetType().GetConstructor(BindingFlags.Instance | BindingFlags.Public,

                    null, new Type[0], null); 

                ctor.Invoke(obj, null);

            }

      }

    定义一个使用该接口的类:

    class Mail : IResetable

        {  public string Subject { get; set; }

            public string Body { get; set; }

            public MailAddress From { get; set; }

            public MailAddress To { get; set; }

            public Mail()

            {   this.Subject = "";

                this.Body = "";

                this.From = null;

                this.To = null;

            }

      }

      具体使用就很简单:

    public class Program

        {  static void Main(string[] args)

            {

                Mail mail = new Mail();

                mail.From = new MailAddress("wuchangx@qq.com");

                mail.To = new MailAddress("friend@anywhere.com");

                mail.Subject = "hi friend";

                mail.Body = "mail content.";

                Console.WriteLine("1/nFrom={0},To={1},/nSubject={2},Body={3}",

                 mail.From, mail.To, mail.Subject, mail.Body);

                mail.Reset();

                Console.WriteLine("2/nFrom={0},To={1},/nSubject={2},Body={3}",

                 mail.From, mail.To, mail.Subject, mail.Body);

                Console.ReadKey();

            }

        }

  1. 局部方法 局部类型;
  2. 初始化;
    IList<User> listUser = new List<User>

                {

                    new User{UserID="1001",UserName="shilin1",UserAge=10},

                    new User{UserID="1002",UserName="shilin2",UserAge=20},

                    new User{UserID="1003",UserName="shilin3",UserAge=30}

                };

 
  1. 匿名类型;
    var q = DataSession.Objects.Where

                    (c => c.ReceiverName == receiverName && c.ProcessType == 0 && c.Deleted == 0

                        && c.Archived == 0 && c.IsDraft == 0 && c.ReceiverArchived == 0).OrderByDescending(c => c.ReceiveDate);           

  1. Lambda表达式;
    public IList<SpecialInformationEntity> SelectInformationView(string receiverName)

            {

                var q = DataSession.Objects.Where

                    (c => c.ReceiverName == receiverName && c.ProcessType == 0 && c.Deleted == 0

                        && c.Archived == 0 && c.IsDraft == 0 && c.ReceiverArchived == 0).OrderByDescending(c => c.ReceiveDate);

                IList<SpecialInformationEntity> list = q.Take(topCount).ToList();

                if (0 < list.Count)

                    return list;

                return null;

            }

在不在
原创粉丝点击