none
请教List add 与 Find 语法问题! RRS feed

  • 问题

  • reflector 查看源码时发现两个小问题


     public static List<MusicEntity> muList = new List<MusicEntity>();

      public static void AddMusic(MusicEntity me)
      {
      Predicate<MusicEntity> match = null;
      lock (muList)
      {
      if (match == null)
      {
      match = tmp => tmp.Ids == me.Ids;
      }
      int num = muList.FindIndex(match);
      if (num != -1)
      {
      muList[num] = me;
      }
      else
      {
      muList.Insert(0, me);
      }
      }
      }

    添加音乐的方法 AddMusic   

    此行报错

    match = tmp => tmp.Ids == me.Ids;

    错误 1 应输入 ;


    另外一处

    new 时也报错

    MusicEntity entity = new MusicEntity{
      id = 1,
      Flag = 0 };


    此处报错

    错误 2 new 表达式要求在类型后有 () 或 []  

    请教语法应怎样修正? 我.net很不好,麻烦各位帮忙修正下语句!

    顺带请教下tmp 不知道是哪里的,但为何编译器没报错。。

    2012年10月5日 5:06

答案

全部回复

  • 第一个错误:

    match = new Predicate<MusicEntity>(tmp => tmp.Ids == me.Ids);

    第二个错误:

    看上去是可以的,不过你用的是3.5的framework写的程序吗?不是的话请先实例化后对每一个属性一一赋值。

    tmp:是一个Lambda表达式的参数,你自己定义的,展开相当于:

    match = new Predicate<MusicEntity>(tmp => tmp.Ids == me.Ids);

    //等同于

    match = new Predicate<MusicEntity>(myFunc);

    public bool myFunc(MusicEntity tmp)

    {

    ………………

    }


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月5日 9:04
  • MusicEntity entity = new MusicEntity{ id = 1, Flag = 0 };
    MusicEntity entity = new MusicEntity{
       id = 1,
       Flag = 0 };
     

    补充一点:new MusicEntity() { ... } 的括号不能省略,是一种类型初始化器的语法。其实编译器,已经提示你了。

    另外一个Lamda 的问题,编程志愿者,已经回答的很好了。

    2012年10月8日 5:42
  •  补充一点:new MusicEntity() { ... } 的括号不能省略,是一种类型初始化器的语法。其实编译器,已经提示你了。

    貌似是可以省略的;)

    所以我不清楚楼主究竟用2.0还是3.5的哈……


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年10月8日 5:48