2013-06-11 123 views
0

我有使用ref參數的函數有問題。這個函數調用她自己使用linq是這樣的:使用ref參數調用函數

public Champ(tabloidConfigColonne tcc,ref Dictionary<string, Jointure> jointures) 
      { 
       ... 
      sousChamps = lc.ToDictionary(
          o => o.nom, 
          o => new Champ(o, ref jointures)); 
      } 

一個錯誤出現,說ref在匿名函數中不可用。

全功能在這裏

public Champ(tabloidConfigColonne tcc,ref Dictionary<string, Jointure> jointures) 
     { 
      nom = tcc.champ; 
      description = tcc.titre; 
      type = tcc.type; 
      valeurDefaut = tcc.valeurParDefaut; 
      modeEdition=new Template(tcc.editeur, tcc.editeurParam1, tcc.editeurParam2, tcc.editeurParam3); 
      if (!string.IsNullOrEmpty(tcc.jointure)) 
      { 
       jointure = jointures[tcc.jointure]; 
       nomTable = jointure.nomNouvelleTable; 
      } 

      visu=tcc.visu; 
      Groupe=tcc.groupe; 
      Id=tcc.nom; 

      valideurs = tcc.valideurs; 
      Obligatoire = tcc.obligatoire; 

      if (tcc.colonnes.Count>0) 
      { 
       List<tabloidConfigColonne> lc = tcc.colonnes.GetColonnes(visibiliteTools.getFullVisibilite(),false); 
       sousChamps = lc.ToDictionary(
        o => o.nom, 
        o => new Champ(o, ref jointures)); 
      } 
     } 

感謝您的幫助。

+13

是的,你不能在匿名函數使用'ref'。你明白爲什麼嗎?看起來你不應該首先使用'ref' - 它不像你改變'Champ'構造函數中的值。請閱讀http://pobox.com/~skeet/csharp/parameters.html –

+0

刪除'ref',你的代碼將被編譯。你沒有分配''jointures'',所以傳遞'ref'在你的代碼中並不重要(對'Dictionary'的引用將被值傳遞,這在你的情況下是完全正確的)。 – dasblinkenlight

+0

不知道爲什麼你會使用ref來傳遞字典,作爲引用類型,除非你需要實際更新指向新對象的指針是不必要的。 – Ashigore

回答