给一个基类Base,我想写一个方法Test,像这样:
private static bool Test(IEnumerable enumerable)
{
...
}
Run Code Online (Sandbox Code Playgroud)
这样的测试如果O类型实现的任何接口返回true IEnumerable<X>,其中X从派生Base,所以,如果我这样做:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
if (Test(enumerable))
{
return enumerable.Cast<Base>().Select(b => b.SomePropertyThatIsString);
}
return enumerable.Cast<object>().Select(o => o.ToString());
}
Run Code Online (Sandbox Code Playgroud)
......使用Reflection,它会做正确的事情.我确信这是跨越所有类型接口的问题,找到符合要求的第一个,但我很难找到IEnumerable<>它们之间的通用.
当然,我可以考虑一下:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
return enumerable.Cast<object>().Select(o => o is Base ? ((Base)o).SomePropertyThatIsString : o.ToString());
}
Run Code Online (Sandbox Code Playgroud)
......但是把它想象成一个思想实验.