【发布时间】:2017-01-05 00:53:14
【问题描述】:
在 C# 中,我想采用类型为“T”的数组我知道“T”支持接口“IMyInterface”并且:
- 将其转换为“IMyinterface”数组
- 在该数组上调用将过滤列表的方法
- 将其转换回原来的 T 型列表。
上面的 1 和 2 工作正常,但我在第 3 步遇到了问题。
这是我的代码:
IEnumerable<IMyInterface> castedArray = originalTypedArray as IEnumerable<IMyInterface>;
if (castedArray != null)
{
var filteredArray = castedArray.Where(r => r.Ids.Contains(MyId)).ToList();
IEnumerable<T> castedBackToOriginalTypeArray = filteredArray as IEnumerable<T>;
if (castedBackToOriginalTypeArray == null)
{
current = new List<T>();
}
else
{
current = castedBackArray;
}
// I need to cast back, because only my Type T has the .Id property
List<int> ids = current.Select(r => r.Id).ToList();
}
问题出在这一行:
IEnumerable<T> castedBackToOriginalTypeArray = filteredArray as IEnumerable<T>;
这似乎总是返回 null(而不是过滤后的数组转换回 IEnumerable
关于我可能做错了什么以及如何正确地将接口数组转换回类型 T 数组的任何建议?
【问题讨论】:
-
在没有 IEnumerable 的情况下,从
T转换到IMyInterface是否有效? -
你为什么需要投射?不能过滤一下原来的
IEnumerable<MyInterface>吗? -
@LucMorin - 我正在对 IEnumerable
进行过滤,但我需要将其转换回原始类型,因为我的下一行代码取决于它。我已将问题更新为更清楚 -
@kat1330 - 转换为 IMyInterface 的数组适用于上面的代码
-
如果你不使用 ToList(),过滤后的数组应该已经是 IEnumerable,不需要再次转换。
标签: c# arrays casting ienumerable