【问题标题】:Use of unassigned out parameter使用未分配的输出参数
【发布时间】:2014-09-14 06:08:32
【问题描述】:

我正在传递数据列表以进一步解析

public void MyMethod()
{
    var urls = new List<MyUrl>();
    ...
    ExtractData(out urls);
}

private static void ExtractData(out urls)
{

   ...
   foreach(var item in items)
   {
       urls.Add(new MyUrl{ Url = item.Url });
   }       
}

我得到 vs 错误

使用未分配的输出参数'urls'

为什么我在将新对象分配到现有列表中后出现此错误?

【问题讨论】:

  • out 参数应该在 ExtractData 方法中设置。 out 参数不能用于从调用者传递输入,但它严格用于从被调用方法获取输出。
  • 看起来你在这里缺少方法的名称private static void(out urls)
  • @BrianRasmussen 谢谢,已编辑。
  • 您首先不应该将其作为out 传递。传递引用,而不是对包含引用的变量的引用。当您打算更改变量时,您使用out传递,但您不打算更改变量,您打算更改的值所引用的对象变量,所以传递值,而不是对变量的引用。只需删除 out 就可以了。
  • 我非常同意埃里克的观点。另外,根据我的经验,我总是建议避免使用out,除非绝对必要。总会有更好的方法。

标签: c# .net oop url


【解决方案1】:

Out 变量应该定义在被调用的方法下。

http://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx

虽然作为输出参数传递的变量不必是 在被传递之前初始化,被调用的方法需要 在方法返回之前赋值。

因此你应该写成:

public void MyMethod()
{
    List<MyUrl> urls = null;
    ...
    ExtractData(out urls);
}
private static void(out List<MyUrl> urls)
{
  urls = new List<MyUrl>();
   ...
   foreach(var item in items)
   {
       urls.Add(new MyUrl{ Url = item.Url });
   }       
}

【讨论】:

  • 这移动了创建列表的责任,并且作为return的函数会简单得多。
  • 我认为您在第二个中缺少方法名称,伙计
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
相关资源
最近更新 更多