この '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);
}
変更を加えたデバイスがない場合は、何もしません。 – BrokenGlass
HasChangesがtrueのデバイスオプションはありますか? – Maess
'State'をデフォルトと違うものに設定してもよろしいですか? – Oded