Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模板参数的C#void等效值_C#_Android_Xamarin.android_Android Asynctask - Fatal编程技术网

模板参数的C#void等效值

模板参数的C#void等效值,c#,android,xamarin.android,android-asynctask,C#,Android,Xamarin.android,Android Asynctask,我的问题的背景是,我正在使用MonoDroid编写一个程序来使用WCF服务。我想要一些关于C#中SOAP的C#库,所以MonoDroid是一个明显的选择 我一直在尝试将void作为模板参数传递给AsyncTask Xamarin(MonoDroid的开发者)在AsyncTask上提供的文档还有很多需要改进的地方,可以在这里找到: 我需要做的是,我用Java完成了一个定义如下的异步任务 public class SoapRequestTask extends AsyncTask&l

我的问题的背景是,我正在使用MonoDroid编写一个程序来使用WCF服务。我想要一些关于C#中SOAP的C#库,所以MonoDroid是一个明显的选择

我一直在尝试将void作为模板参数传递给AsyncTask

Xamarin(MonoDroid的开发者)在AsyncTask上提供的文档还有很多需要改进的地方,可以在这里找到:

我需要做的是,我用Java完成了一个定义如下的异步任务

        public class SoapRequestTask extends AsyncTask<Void, Void, String>
公共类SoapRequestTask扩展了AsyncTask
C#与void模板参数的等价物是什么?

在C#中,不能将
void
(也称为)用作泛型类型参数。Net库通过具有多个“重载”类型来解决此问题,如
Task
Task


但我不知道单机器人,所以可能有一些特定的解决方案。文档似乎表明有一种特殊类型的
Java.Lang.Void
,可以使用(而不是这里不能使用的普通.Net
Void

在C中没有与
Void
等效的标准。该类型确实存在,但不能作为泛型类型参数使用

最接近的例子是F#使用
Unit
作为值无趣的插槽的占位符。在C#中很容易复制

然后,它可以用于您不关心的值

public class SoapRequestTask : AsyncTask<Unit, Unit, String> { 
  ...
}
公共类SoapRequestTask:AsyncTask{
...
}

对我来说,看起来您根本没有使用void类型,在示例中它只是表示“任何类型都可以在这里使用”。读取AsyncTask的“泛型类型段落”意味着这3种类型将表示参数类型、进度类型和结果类型。例如,如果您创建了一个声明为:

public class MyStringTask extends AsyncTask<String, Integer, Long> {
...
}
public abstract class AsyncTask<TParam, TProgress, TResult>
进度将以整数值的形式通知,结果值将以长数值的形式提供

在C#中,您通常会看到以下声明:

public class MyStringTask extends AsyncTask<String, Integer, Long> {
...
}
public abstract class AsyncTask<TParam, TProgress, TResult>
公共抽象类异步任务
对类型参数使用“T”语法,并按以下方式实现(使用上述示例):

公共类MyStringTask:AsyncTask
{
...
}

我实际上为任何感兴趣的人找到了答案:

语法是

    private class SoapTask : AsyncTask{}

它的工作原理与java中的AsyncTask类似,但参数都是java.Lang.Objects(参数类型为java.Lang.Objects[]的情况除外)因此,您可以根据需要在正文中设置它们。

那么,仅仅提供Object而不是Void就足够了吗?Mono for Android提供了一个不接受任何通用参数的AsyncTask;您链接到了它(尽管从Java文档导入的内容在那里有误导性)。只需从
AsyncTask
(无类型参数)继承并重写
DoInBackground(params Java.Lang.Object[])
    private class SoapTask : AsyncTask{}