我的问题的重点是C# 泛型以及将接口IXList -or- IYList 传递给这个“ GetAllValues ()”方法。目标是调用GetAllValues<IXList>()
-or-的通用代码GetAllValues<IYList>()
。
2013 年 9 月 21 日跟进:我了解到:where Z : IXList, IYList
意味着 Z 是类型IXList
,并且ITList
- 鉴于这种理解,人们可能会尝试where Z : class
- 这充其量是仍然无法正常工作的横向步骤,因为那时Z.anything
......anything
没有找到,编译器对Z
...一无所知
是否可以测试通过的 Z 的实际类型,然后有条件的运行时代码选择正确的类型list
来调用 .Head()、.Get() 和 .Next()?例如, ((IXList)list).Head();
- 或 - ((IYList)list).Head();
[[ 是的,有可能,请参阅 2nd answer with code below 日期为 09-24-13。]]
13 年 9 月 29 日跟进:最后,下面发布的答案/解决方案#3将最终解决方案移至更面向对象的解决方案。因此,这第 3 个解决方案提出了我最初的问题,即如何询问泛型类型以及如何解决最初遇到的编译器歧义错误。[[请参阅答案/解决方案#3,代码如下,日期为 09-29-13。]]
internal static IEnumerable<int> GetAllValues<Z>(Z list)
where Z : IXList, IYList
{
try
{
list.Head(); // Error 344 - The call is ambiguous between the following
// methods or properties: 'IXList.Head()' and 'IYList.Head()'
}
catch (Exception)
{
yield break;
}
do
{
IntPtr lineItemPointer;
int x = list.Get(); // Error 345 - The call is ambiguous between the following
// methods or properties: 'IXList.Get()' and 'IYList.Get()'
yield return x;
try
{
list.Next(); // Error 346 -The call is ambiguous between the following
// methods or properties: 'IXList.Next()' and 'IYList.Next()'
}
catch (Exception)
{
yield break;
}
} while (true);
}