【发布时间】:2011-12-15 17:49:30
【问题描述】:
我有以下代码形状。看来我误解了 C# 方法的返回值。一个“完整”的枚举器怎么可能作为一个空的枚举器返回?
class ThingDoer
{
public NpgsqlDataReader DoQuery()
{
NpgsqlCommand c = new NpgsqlCommand(...);
NpgsqlDataReader dataread = c.ExecuteReader();
return dataread; // Debugger confirms that six data are enumerable here.
}
}
...
class OtherThing
{
public void higherLevelFunction()
{
NpgsqlDataReader result = myThingDoer.DoQuery();
result.Read(); // No data! result's enumerable returns nothing!
}
}
【问题讨论】:
-
调试器如何“确认”这一点?你在调试器中调用什么?空结果仍然有字段,但没有行。另外,这一切中的 NpgsqlConnection 在哪里?
-
@Jon Hanna 我已经消除了围绕这个问题的所有额外工作,包括像连接这样的平凡细节,以突出实际问题。通过设置断点,我能够检查返回前后读取的数据。