【发布时间】:2012-08-29 19:42:58
【问题描述】:
当我尝试将ref 添加到重载方法的参数时,为什么会出现以下错误?
最好的重载方法匹配 'WindowsFormsApplication1.Form1.SearchProducts(int)' 有一些无效 论据
参数 1:无法从 'ref 转换 System.Collections.Generic.List' 到 'int'
这是一些(简化的)代码:
public virtual IList<int> SearchProducts(int categoryId)
{
List<int> categoryIds = new List<int>();
if (categoryId > 0)
categoryIds.Add(categoryId);
return SearchProducts(ref categoryIds);
}
public virtual IList<int> SearchProducts(ref IList<int> categoryIds)
{
return new List<int>();
}
编辑:
你们中的一些人问我为什么在这种情况下我需要ref,答案是我可能不需要它,因为我可以清除列表并添加新元素(我不需要创建新的参考)。但问题不在于我需要或不需要ref,而在于我为什么会出错。而且由于我没有找到答案(在谷歌搜索了一会儿之后),我认为这个问题很有趣,值得在这里提问。看来你们中的一些人不认为这是一个好问题并投票关闭它......
【问题讨论】:
-
你想做什么?不清楚为什么在这种情况下需要使用
ref -
@ClaudioRedi:OP 明确表示代码已被简化。他如何使用
ref与主题无关。 -
@Ed S.:既然我在这里,只是想看看他是否误解了
ref会做什么。在我看来,他在滥用它,所以我可以首先解决他删除ref的问题 :) -
@ClaudioRedi:当然,这是一个很好的评论(我也这么认为),但他说它已经被简化了,所以我想我会不管它。也就是说......我也不需要对你发表评论:D
-
@ClaudioRedi 我可能不需要
ref,但这不是问题所在(见编辑)。
标签: c#