Dil*_*ave 5 c# foreach xamarin.android
在进行了一些重大的重构(转向PCL)之后,我有一些代码(它不是重构的一部分)运行正常,但现在抛出了异常.
该代码是Xamarin Android项目的一部分,该项目在移动到可移植类库之前使用文件链接.
这是一件简单的事情,但我不明白为什么会这样
foreach(var station in stationList)
{
// Breakpoint on next line shows station to be null..!
if(station.ClusterId != Guid.Empty)
{
// Code in here
}
}
Run Code Online (Sandbox Code Playgroud)
问题是虽然stationList包含许多StationViewModel对象,但station实例总是为空 - 这怎么可能呢?
我曾尝试更换foreach一个for循环,但结果却是相同的- station为空.
我还重新启动了Visual Studio并重新启动.
没有Xamarin更新似乎很出色.
代码运行正常,生成stationList并没有改变,也没有这个类的实现.
编辑:stationList创建过程是:
在PCL中调用SQLite'repo'返回(已填充)IList<station>
_loadedStations = await _stationManager.GetStationsAsync();
使用AutoMapper 从上面的列表生成一个新的(正确填充)List<StationViewModel>
fullStationList = AutoMapper.Mapper.Map<IList<Station>, IList<StationViewModel>>(_loadedStations);
在单独的方法中,上面的视图模型列表基于LatLng坐标进行过滤.
var stationList = fullStationList.Where(x => mapBounds.Contains(new LatLng(x.Latitude, x.Longitude))).ToList();
在foreach如下的上面一行代码..
解决方案:我已经"解决"了这个问题,但仍然不知道是什么导致了这个问题.
在与foreach另一个相同的方法中,包含在一个中if.它也有站标识符;
if (zoomChanged)
{
foreach (var station in fullStationList)
{
station.ClusterId = Guid.Empty;
}
RunOnUiThread(() => _stationMap.Clear());
_clusters.Clear();
}
Run Code Online (Sandbox Code Playgroud)
通过更改任一变量名称,代码将正常运行,并且先前错误的循环将运行没有任何问题.
请注意,第二个循环不在第一个循环中 - 这显然不起作用,但我不明白为什么这会导致问题.
我以这种方式尝试过并且有效:
internal class CStation
{
private Guid _clusterId;
public CStation()
{
_clusterId = Guid.NewGuid();
}
public Guid StationName
{
get { return _clusterId; }
}
}
private voit TestList()
{
List<CStation> stationList = new List<CStation>();
CStation test1 = new CStation();
CStation test2 = new CStation();
CStation test3 = new CStation();
stationList.Add(test1);
stationList.Add(test2);
stationList.Add(test3);
foreach (var station in stationList)
{
// Breakpoint on next line shows station to be null..!
if (station == null )
{
throw new ArgumentNullException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为您没有实例化 Guid。我在 Station 的构造函数中做到了 ->_clusterId = Guid.NewGuid();
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |