方法在尝试访问空集合的第一个元素时无异常地退出(编辑:已知表单加载问题)
本文关键字:编辑 退出 问题 加载 表单 异常 访问 空集 集合 元素 第一个 | 更新日期: 2023-09-27 18:26:16
我注意到我编写的一个方法很早就退出了,并且在尝试访问集合中的第一个元素(如string[]或List)时,如果它为空,则不会引发任何异常。例如
var emptyList = new List<string>();
var aha = emptyList.Where(i => i == "four");
var props = aha.First();
//anything after here in the same method does not run
这是正确的吗?这怎么会是编译器中有用的功能?!(使用.Net 4)
编辑完整的winforms程序:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var emptyList = new List<string>();
var aha = emptyList.Where(i => i == "four");
var props = aha.First(); //throws exception
var fdsfsa = 0;
}
private void useref() {
var emptyList = new List<string>();
var aha = emptyList.Where(i => i == "four");
var props = aha.First(); //exits method, doesn't throw exception?
var asdf = 0;
}
private void Form1_Load(object sender, EventArgs e)
{
useref();
}
}
否,这将以InvalidOperationException
失败。我相信你只是在调用代码中发现了异常。它很容易显示-只需将的确切代码放入一个简短但完整的示例中即可:
using System.Collections.Generic;
using System.Linq;
class Test
{
static void Main()
{
var emptyList = new List<string>();
var aha = emptyList.Where(i => i == "four");
var props = aha.First();
}
}
结果:
Unhandled Exception: System.InvalidOperationException: Sequence contains no elements
at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
at Test.Main()
因此,你的下一步是找出为什么你没有看到异常——我们对此无能为力。
尝试以下操作:
try {
var emptyList = new List<string>();
var aha = emptyList.Where(i => i == "four");
var props = aha.First();
} catch(InvalidOperationException ex) {
//ex.message
}