這'foreach'的代碼將退出工作,它似乎是由於一些錯誤。但是,不會拋出異常。有沒有什麼好的理由?永遠不會達到INSIDE循環中的代碼(即註釋的位置)。失敗是枚舉時。foreach跳出沒有例外拋出
foreach (DeviceOption<int> d in _deviceOptions.Where(d => d.HasChanges))
{
//Call some DAL method
}
在情況下,這是方程的一部分,這是 'DeviceOption' 類代碼:
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; }
}`
更新:我想通了這一點。 我明白了這一點。結果發現一個無效的演員正在發生,代碼是錯誤的。奇怪的是,這個例外沒有被拋出。我現在知道這一點,因爲我在try/catch中包裝了代碼。行爲就像這段代碼在單獨的線程上運行一樣。那是LINQ的工作原理嗎?
的原因鑄是因爲_deviceOptions是一個列表,幷包含派生類型,如DeviceOption或或等通過添加該到LINQ,東西現在都很好:「& & 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 2011-12-14 19:54:43