更新 问题出在调用代码中。 ReSharper对多个枚举进行了讨论并生成了此代码。
Firebase-root
|
--- Schools
| |
| --- schoolId1
| |
| --- schoolName: School Name 1
| |
| --- Period1: EndTime
| |
| --- Period2: EndTime
| |
| --- Districts
| |
| --- District1: true
| |
| --- District2: true
|
--- Districts
|
--- DistrictId1
|
--- districtsName: Districts Name 1
|
--- Schools
|
--- School1: true
|
--- School2: true
当我这样离开时,一切运作良好。
public async Task SendItemsToMovements(IEnumerable<object> items)
{
var enumerable = items as IList<object> ?? items.ToList();
if (!enumerable.Any())
{
return;
}
var arrayOfArraysForUpsert = ItemsToUpsertStringConverter.GetString(enumerable);
}
谢谢大家!
我有这个代码的UWP应用程序(c#7,vs2017)。
当public async Task SendItemsToMovements(IEnumerable<object> items)
{
if (!items.Any())
{
return;
}
var arrayOfArraysForUpsert = ItemsToUpsertStringConverter.GetString(items);
}
items
IEnumerable<Material>
案例IEnumerable<Material> materials
未被解雇并被解雇default
时。为什么呢?
public static string GetString(IEnumerable<object> items)
{
switch (items)
{
case IEnumerable<Material> materials:
foreach (var material in materials)
{
}
break;
case IEnumerable<Movement> movements:
foreach (var item in movements)
{
}
break;
default:
return string.Empty;
}
return "...";
}
感谢您的任何想法。
答案 0 :(得分:2)
之所以发生这种情况,是因为在C#中,反演不能自动收集。你需要手动投射它。
您可以尝试这样的事情
public static string GetString<T>(IEnumerable<T> items)
{
if (typeof(T) == typeof(Material))
{
foreach (var material in items.Cast<Material>())
{
}
}
if (typeof(T) == typeof(Movement))
{
foreach (var material in items.Cast<Movement>())
{
}
}
return "...";
}
答案 1 :(得分:-1)
您无法将IEnumerable<object> items
投放到List<Material>
,IEnumerable<object>
是一种没有List<Material>
插入的类型。
你应该得到第一个获得该类型的项目然后投射它。我编写代码来做到这一点。
public static string GetString(IEnumerable<object> items)
{
var item = items.FirstOrDefault();
if(item == null)
{
return string.Empty;
}
switch(item)
{
case Material material:
foreach(var temp in items.Cast<Material>())
{
}
break;
case Movement movement:
foreach (var temp in items.Cast<Movement>())
{
}
break;
default:
return string.Empty;
}
return "...";
}