Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步和匿名类型_C#_Linq_Async Await - Fatal编程技术网

C# 异步和匿名类型

C# 异步和匿名类型,c#,linq,async-await,C#,Linq,Async Await,此方法: private async Task readFileInfo(string folderId) 调用了另一个方法: importCount = await VM.importVehicles(myXDoc); 定义如下:(注意:我将其从for循环更改为for-each循环,但得到了类似的结果) 公共异步任务导入车辆(XDocument importXMLDocument) { var Importedvehicles=来自importXMLDocument.substands(“

此方法:

private async Task readFileInfo(string folderId)
调用了另一个方法:

importCount = await VM.importVehicles(myXDoc);
定义如下:(注意:我将其从for循环更改为for-each循环,但得到了类似的结果)

公共异步任务导入车辆(XDocument importXMLDocument)
{
var Importedvehicles=来自importXMLDocument.substands(“车辆”)中的车辆
选择新的
{
VehicleName=vehicle.Element(“VehicleName”).值,
VehicleYear=车辆元素(“VehicleYear”).值,
里程表=车辆元件(“里程表”)值,
LicensePlate=车辆元素(“LicensePlate”).值,
油重=车辆元素(“油重”)值,
油量=车辆。元素(“油量”)。值,
OilFilterModelNumber=车辆元素(“OilFilterModelNumber”),
AirFilterModelNumber=车辆元素(“AirFilterModelNumber”),
OilChangedDate=车辆元素(“OilChangedDate”),
换油量计=车辆元件(“换油量计”),
NextOilChangeDate=vehicle.Element(“NextOilChangeDate”),
NextOilChangeOdometer=车辆元件(“NextOilChangeOdometer”),
设置距离=车辆要素(“设置距离”),
设置月数=车辆要素(“设置月数”),
};
Int32车辆ID;
vehicleId=等待getMaxVehicleId();
尝试
{
foreach(进口车辆中的var项目)
{
车辆myImportedVehicle=新车();
myImportedVehicle.VehicleId=VehicleId+=1;
myImportedVehicle.ImagePath=“Assets/car2.png”;
myImportedVehicle.VehicleName=项目.VehicleName;
myImportedVehicle.VehicleModel=item.VehicleName;
myImportedVehicle.VehicleYear=short.Parse(item.VehicleYear);
myImportedVehicle.Current里程表=转换为NT32(项目里程表);
myImportedVehicle.LicensePlate=项目.LicensePlate;
myImportedVehicle.LastOilChangedDate=Convert.ToDateTime(item.OilChangedDate.Value.ToString()).ToString(“d”);
myImportedVehicle.LastOilChangedOdometer=(Int32)item.OilChangedOdometer;
myImportedVehicle.ReminderDistance=(Int32)item.SettingDistance;
myImportedVehicle.MemberMonths=(Int32)item.SettingMonths;
车辆信息myImportVI=新车辆信息();
myImportVI.OilWeight=物料.OilWeight;
myImportVI.OilAmount=item.OilQuantity;
myImportVI.OilFilterNumber=item.OilFilterModelNumber.Value.ToString();
myImportVI.AirFilterNumber=item.AirFilterModelNumber.Value.ToString();
myImportedVehicle.vehicleInfo=myImportVI;
m_车辆。添加(myImportedVehicle);
}
}
捕获(例外情况除外)
{
System.Diagnostics.Debug.WriteLine(例如Message.ToString());
}
等待存储列表();
返回进口车辆。计数();
}
我得到一个错误:

对象引用未设置为对象的实例


当我单步执行时,
I文档
会突出显示,但随后它会直接转到for语句。然后它会出错,因为它看起来还没有从
iVehicle
中获得结果。

这并不能100%回答您的问题,但它应该给您一个良好的开端

调试器在声明
iVehicle
后直接跳入
for…循环
,原因是您的查询在声明时没有执行。因此,此时的iHicle不是匿名类型的集合

调用
.Count()
时,正在执行查询,并且
iVehicle
正试图转换为正确的匿名类型集合。但是,由于查询中的某些内容(在调用
.Count()
后执行)是
null
,因此您将收到
NullReferenceException

您应该首先验证
importXMLDocument
和调用
subjections()
的返回值都不为null

希望这能有所帮助

编辑:

既然您已经给出了一个完整的示例,那么就有了大量可能为
null
的位置

每次使用时:

vehicle.Element("SomeElementNameHere")
这可能是
null
。然后调用
null
对象上的
.Value
属性


你需要确保每个元素都在那里。隔离每个案例,并确定哪一个是
null

尝试这样编写代码:

var query =
    from vehicle in importXMLDocument.Descendants("vehicle")
    select new { ... };

var  iVehicle = query.ToArray();

for (var i = 0; i <= iVehicle.Count(); i++)
{
    ...
}
var查询=
来自importXMLDocument.subjects中的车辆(“车辆”)
选择新{…};
var iVehicle=query.ToArray();

对于(var i=0;i)您实际在哪里返回任何内容?我认为这与
async/await
无关。我敢打赌,由于延迟执行,您的查询中存在
null
。请先调试它。发布简短但完整的示例(另一个示例可以编译和运行)显示问题的代码。此外,问题很可能不在
async
或匿名类型。我更新了一个更完整的示例。为什么不调用
ToArray()
会导致
NullReferenceException
?@SimonWhitehead-调用
Count()
将导致计算,但它将独立于循环内的计算。迭代序列可能会产生副作用,因此最好避免多次迭代。@svick-我不知道-我们从循环内获得的唯一代码是
。我们需要更多信息来进行分析
var query =
    from vehicle in importXMLDocument.Descendants("vehicle")
    select new { ... };

var  iVehicle = query.ToArray();

for (var i = 0; i <= iVehicle.Count(); i++)
{
    ...
}