0

コレクション内の最初の要素 (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();
    }
}
4

2 に答える 2

3

いいえ、それは で失敗します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()

したがって、次のステップは、例外が表示されない理由を突き止めることです。これについてはサポートできません。

于 2013-08-02T22:57:09.377 に答える
0

次のことを試してください。

try {
    var emptyList = new List<string>();
    var aha = emptyList.Where(i => i == "four"); 
    var props = aha.First();
} catch(InvalidOperationException ex) {
    //ex.message
}
于 2013-08-02T23:02:26.477 に答える