从kotlin转换为c#

问题描述 投票:-1回答:1

我需要将以下代码从kotlin转换为c#。

kotlin代码:

fun isConnectedToTheInternet(): Boolean {
        val cm = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            cm.run {
                cm.getNetworkCapabilities(cm.activeNetwork)?.run {
                    return when {
                        hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                        hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                        hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
                        else -> false
                    }
                }
            }
        } else {
            cm.run {
                cm.activeNetworkInfo?.run {
                    if (type == ConnectivityManager.TYPE_WIFI) {
                        return true
                    } else if (type == ConnectivityManager.TYPE_MOBILE) {
                        return true
                    }
                }
            }
        }

        return false
    }

这是到目前为止我能够转换的。我无法转换已评论的内容:

    public Boolean isConnectedToTheInternet(Context context)
    {
        ConnectivityManager cm = (ConnectivityManager)context.GetSystemService(ConnectivityService);

        if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M)
        {
//            cm.run {
//                cm.GetNetworkCapabilities(cm.ActiveNetwork)?.run {
//                    return when {
//                        hasTransport(Android.Net.TransportType.Wifi)-> true
//                        hasTransport(Android.Net.TransportType.Cellular)-> true
//                        hasTransport(Android.Net.TransportType.Ethernet)-> true
//                    else -> false
//                    }
                }
            }
        }
        else
        {
//            cm.run {
//                cm.ActiveNetworkInfo?.run {
//                    if (type == ConnectivityManager.TYPE_WIFI)
//                    {
//                        return true;
//                    }
//                    else if (type == ConnectivityManager.TYPE_MOBILE)
//                    {
                        return true;
                  }
                }
            }
        }

使用c#代码,ConnectivityManager没有.run方法或属性,我找不到兼容的东西。对于这种转换,我一无所知,对kotlin一无所知。我可以帮忙。谢谢。

c# android
1个回答
0
投票

第一段代码将按以下方式翻译。

return cm.GetNetworkCapabilities(cm.ActiveNetwork).HasTransport(Android.Net.TransportType.Wifi) || cm.GetNetworkCapabilities(cm.ActiveNetwork).HasTransport(Android.Net.TransportType.Cellular) || cm.GetNetworkCapabilities(cm.ActiveNetwork).HasTransport(Android.Net.TransportType.Ethernet);

第二段代码将按以下方式翻译

return cm.ActiveNetworkInfo.GetType() == ConnectivityManager.TYPE_WIFI ||
cm.ActiveNetworkInfo.GetType() == ConnectivityManager.TYPE_MOBILE;

xamarin中不存在Run,因为它不是android的一部分sdk。实际上是kotlin范围函数的一部分。看看kotlin的官方documentation

PD:我每天在工作中用Kotlin编写代码,在Hobbie中用C#编写代码:)

© www.soinside.com 2019 - 2024. All rights reserved.