我正在使用 Dapper 返回动态对象,有时还手动映射它们。一切正常,但我想知道铸造法则是什么以及为什么以下示例成立。
(对于这些示例,我使用“StringBuilder”作为我的已知类型,尽管它通常类似于“Product”)
IEnumerable<dynamic>
示例 1:即使 'makeStringBuilder' 清楚地返回一个StringBuilder
对象,为什么这会返回一个?
示例 2:为什么会构建,但如果是 'Example1' 则不会IEnumerable<StringBuilder>
?
示例 3:与示例 2 相同的问题?
private void test()
{
List<dynamic> dynamicObjects = {Some list of dynamic objects};
IEnumerable<dynamic> example1 = dynamicObjects.Select(s => makeStringBuilder(s));
IEnumerable<StringBuilder> example2 = dynamicObjects.Select(s => (StringBuilder)makeStringBuilder(s));
IEnumerable<StringBuilder> example3 = dynamicObjects.Select(s => makeStringBuilder(s)).Cast<StringBuilder>();
}
private StringBuilder makeStringBuilder(dynamic s)
{
return new StringBuilder(s);
}
对于上述示例,是否有推荐的处理方法?这样的选角会影响表演吗?谢谢!