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));
}
}
感謝您的幫助。
是的,你不能在匿名函數使用'ref'。你明白爲什麼嗎?看起來你不應該首先使用'ref' - 它不像你改變'Champ'構造函數中的值。請閱讀http://pobox.com/~skeet/csharp/parameters.html –
刪除'ref',你的代碼將被編譯。你沒有分配''jointures'',所以傳遞'ref'在你的代碼中並不重要(對'Dictionary'的引用將被值傳遞,這在你的情況下是完全正確的)。 – dasblinkenlight
不知道爲什麼你會使用ref來傳遞字典,作爲引用類型,除非你需要實際更新指向新對象的指針是不必要的。 – Ashigore