小编Coo*_*ots的帖子

在编译时而不是在运行时检测Xamarin Android App(Visual Studio 2015)中的API级别不兼容

我正在使用Visual Studio 2015(Windows)编写Xamarin Android应用程序。我想以最新的Android API为目标,同时保持与API 16(4.1 Jelly Bean)的向后兼容性。

我知道如何通过API级别检查确保不会引发运行时错误:

if(Android.OS.Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
    //Call API supported by Lollipop and above, but not by lower API's
}
else
{
   //Alternative code for graceful backwards compatibility
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我没有进行此检查,Visual Studio仍然会愉快地编译并运行我的代码-如果不支持该API,则会收到运行时Java.Lang.NoSuchMethodError异常。我可以手动将项目重置为较低级别的API,以捕获编译时的错误,但这有点麻烦-在编译时捕获这些错误(即使是警告)也很不错,而无需手动将其重置为较低的版本我想支持的API。

如何在编译时检测到不兼容的API调用?

注意:我确实在StackOverflow上找到了类似的问题,但是它专门针对Mac的Xamarin Studio-这表明这应该可以在Visual Studio 2015 for Windows中完成(2017解决方案也可以)。

c# android xamarin.android xamarin

6
推荐指数
0
解决办法
3692
查看次数

是否可以在 C# 中创建“完美转发”泛型集合?

考虑这个 C++ 代码片段:

std::vector<Foo> bar;
bar.emplace_back(9001);    //Foo defines a constructor that takes int
Run Code Online (Sandbox Code Playgroud)

这将创建一个 type 对象Foo,传递任何构造函数参数,并将新对象存储在向量中。功能上等价于bar.push_back(Foo(9001));,但效率更高,因为没有Foo创建临时文件。

有没有办法在 C# 中实现类似的功能?

如果是这样,它会提供任何真正的好处,就像在 C++ 中一样,还是只是语法糖

编辑:这个问题特别是关于 C#(结构)中的值类型集合;我正在寻找的好处(除了简化的Add语法)类似于 C++11emplace方法的好处- 无需构造、复制和销毁 (GC) 临时对象。

c# c++ c++11

2
推荐指数
1
解决办法
490
查看次数

为什么base64编码两次?

我见过一些引用双重编码的 Base64 字符串的帖子(比如thisthis)。为什么需要这项技术?

base64 encoding

1
推荐指数
1
解决办法
1795
查看次数

标签 统计

c# ×2

android ×1

base64 ×1

c++ ×1

c++11 ×1

encoding ×1

xamarin ×1

xamarin.android ×1