是真的使用匿名或动态类型作为参数吗?

时间:2016-07-10 12:19:36

标签: c# wpf xamarin

public async Task<List<News>> GetAllAsync(DateTime from, 
                                          string orderBy = "-published", 
                                          DateTime to = new DateTime(),
                                          int page = 1
                                          int category = 0,
                                          int[] tags = null, 
                                          int perPage = 10)

例如,在http服务中获取新闻

并且在几乎每个服务中都有很多查询参数。

我是否必须为每个人创建一个单独的类?

1 个答案:

答案 0 :(得分:1)

您的问题被标记为xamarin相关,因此我将从这个角度提出问题:

如果您打算定位Xamarin.iOS,那么无法使用c#dynamic功能。当你使用dynamic关键字时,这会触发c#编译器在幕后生成一些隐藏的代码(你可以通过使用IL反汇编程序查看我所说的内容),并且该代码使用了从DLR构造,称为CallSite。这些CallSite对象反过来在内部使用DynamicMethod,以处理强类型dynamic引用的魔力。 DynamicMethod是一种在运行时生成可运行代码的优化机制。

iOS不允许在运行时生成可运行的代码。

所以你的应用程序可以在iOS模拟器上运行(没有这个限制),但在真实设备上会失败。

我在这个功能的内部工作方面有一些(旧的)博客文章,这应该很明显你不能在iOS平台上使用它,因为Apple对代码发出的限制:

http://www.wintellect.com/devcenter/krome/dynamic-objects-and-call-sites

http://www.wintellect.com/devcenter/krome/getting-to-know-dynamicmethod

您也不能使用匿名对象,因为无法在函数范围之外导出匿名类型定义。换句话说,它们无法显示在您的方法签名中。

我担心你唯一可行的选择是你的函数有很多重载,或者定义一个强大的选项类(或类的层次结构)来处理你需要的所有变种。