我不确定为什么会发生这种异常......如果我没有检查i < table.Rows.Count
我能理解,但我确实检查了这个,所以我很困惑为什么行不在表格中......我在这里遇到了障碍,并且可以使用比我更有经验的人。我只是希望这是一个小小的愚蠢错误。
编辑:之前我有一个调试行myTable.Rows[0]["FieldName"]
和myTable.Rows[1]["FieldName"]
。第二个也抛出异常,第一个没有。
internal Collection<fieldDef> DefaultList
{
get
{
Collection<fieldDef> listFields = new Collection<fieldDef>();
listFields.Clear();
//Rows.Count is checked here, which is why I'm so confused...
for (int i = 0; i < myTable.Rows.Count; i++)
{
string strFieldName = "";
if (myTable.Rows[i]["FieldName"].ToString() != "") //Exception happens here
{
strFieldName = myTable.Rows[i]["FieldName"].ToString();
}
FieldType type = FieldType.Character;
if (myTable.Rows[i]["FieldType"].ToString() != "") type = (FieldType)Enum.Parse(typeof(FieldType), myTable.Rows[i]["FieldType"].ToString());
//
//Other Similar lines to that above
//
fieldDef def = new fieldDef(i, strFieldName, strFieldName, type, /*other items...*/);
listFields.Add(def);
}
return listFields;
}
set
{
//Nothing negative happens here, left out for simplicity
}
}
答案 0 :(得分:1)
我找到了解决方案。只是发布以防任何人有同样的问题。原始帖子中没有说明,但是这是通过DataTable上的更改/编辑事件调用的(由按钮点击触发并保存设置所需)。
问题是如果你试图在事件中获取属性,那么实际上是从表中拉出行(就像它被向上或向下移动一样)并且状态是“分离的”,因此,不再是正式在表格中。
要解决这个问题,我只是等待访问我的属性,直到事件完成后(因此行完全放回到表中),这需要对代码的其他部分进行一些修改。
希望这可以帮助有人继续前进!
答案 1 :(得分:0)
我还没有50名代表能够发表评论/提问,所以我的回答是基于我上面所看到的......
首先,如果您包含了错误/异常,那将会很有帮助。也就是说,虽然您可能有一行,但在调用该行中的FieldName字段时,您没有检查null - 您确定该行中的那个行中有非空值吗?如果它为null,则调用.ToString()将抛出异常......我会建议这样的事情:
class _GhostLink(object):
toGhost = lambda filename: False
class _Mod_AllowGhosting_All(_GhostLink):
def _loop(self):
# ...
if self.__class__.toGhost(fileName) != oldGhost:...
这可能是您的问题,也可能不是,但无论哪种方式,在这里检查null都是一种很好的做法,有助于避免无效操作,例如尝试使用null实例。