2011-12-14 15 views
1

この 'foreach'コードは機能しなくなり、何らかのエラーが発生したようです。ただし、例外はスローされません。何か良い理由はありますか?ループ内のコード(つまりコメントがどこにあるか)に決して到達しません。失敗はそれが列挙している間です。foreachが例外がスローされずにホッピングする

public class DeviceOption 
{ 
    private object _state; 
    public object State 
    { 
     get { return _state; } 
     set 
     { 
      if (_state == value) 
      { 
       return; 
      } 
      HasChanges = true; 
      _state = value; 
     } 
    } 
    public bool UserEditable { get; set; } 
    public DateTime Timestamp { get; set; } 
    public int UserId { get; set; } 
    public bool HasChanges { get; set; } 
    public bool IsNew { get; set; } 
    public Guid ID { get; set; } 
    public string DisplayCategory { get; set; } 
    public string Name { get; set; } 

} 
public class DeviceOption<T> : DeviceOption where T : IComparable 
{ 
    private T _value; 

    public T Value 
    { 
     get { return _value; } 
     set 
     { 
      if (value.CompareTo(_value) == 0) { return; } 

      HasChanges = true; 
      OriginalValue = _value; 
      _value = value; 
     } 
    } 

    public T OriginalValue { get; set; } 

}` 

UPDATE:

foreach (DeviceOption<int> d in _deviceOptions.Where(d => d.HasChanges)) 
{ 
    //Call some DAL method 
} 

が場合、これは方程式の一部であり、これは 'DeviceOption' クラスコードである私はこれを考え出しました。 私はこれを理解しました。無効なキャストが起こっていて、コードが間違っていたことが分かります。奇妙なのは、例外がスローされていないということです。私はtry/catchでコードをラップしているので、これを知っています。振る舞いは、このコードが別のスレッドで実行されているかのように動作しています。それがLINQの仕組みですか?

キャストの理由は_deviceOptionsがリストされ、LINQにこれを追加することにより、このようなDeviceOptionかまたは等の派生型が含まれているので、物事が今も元気ですされています。ここ

「& & dがDeviceOptionは」更新されたコードがあると私は不正なキャストを固定する方法:

try 
     { 

      foreach(DeviceOption<int> d in _deviceOptions.Where(d => d.HasChanges && d is DeviceOption<int>)) 
      { 
       //blah blah blah 
      } 



     } 
     catch(Exception ex) 
     { 
      //this is how I detected the exception. Don't ask why I didn't think of this before :(
      Console.Write(ex.Message); 
     } 
+2

変更を加えたデバイスがない場合は、何もしません。 – BrokenGlass

+0

HasChangesがtrueのデバイスオプションはありますか? – Maess

+0

'State'をデフォルトと違うものに設定してもよろしいですか? – Oded

答えて

1

それはHasChangesがTrueで何のデバイスオプションが存在しないことが表示されます。その場合、Where拡張メソッドは、空の列挙を生成します。

0

さて、あなたが提供した情報を与えられ、私はこのクエリは空可算返すことを想定する必要があります。

_deviceOptions.Where(d => d.HasChanges) 

は、あなたが正確に何が起こっているかを確認するために、すべてのデバッガを使用したことがありますか?クエリをループ式から引き出し、ループ式に含まれているものを確認します。

関連する問題