Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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
Java到c的转换——需要帮助将Java的可运行方法转换为c吗#_Java_C# - Fatal编程技术网

Java到c的转换——需要帮助将Java的可运行方法转换为c吗#

Java到c的转换——需要帮助将Java的可运行方法转换为c吗#,java,c#,Java,C#,我正在XamarinVisualStudio中建立一个android项目。下面的Java可运行代码在c#中返回错误。。当我在新runnable中添加“void run()”时,runnable方法的“}”不匹配/错位 private Runnable DoImageProcessing = new Runnable() { public void run() { bProcessing = true;

我正在XamarinVisualStudio中建立一个android项目。下面的Java可运行代码在c#中返回错误。。当我在新runnable中添加“void run()”时,runnable方法的“}”不匹配/错位

private Runnable DoImageProcessing =
        new Runnable() {
            public void run() {
                bProcessing = true;
                getPoints();
                bProcessing = false;
            }
        };

我不熟悉Java,但您似乎正在尝试创建函数委托。无效返回称为操作

试试这个:

public class ImageProcessor
{
    bool bProcessing;
    private void getPoints() { }

    public Action DoImageProcessing;

    public ImageProcessor()
    {
        DoImageProcessing = () =>
        {
            bProcessing = true;
            getPoints();
            bProcessing = false;
        };
    }
 }

确切的翻译如下所示:

private Action DoImageProcessing = () =>
{
    bProcessing = true;
    GetPoints();
    bProcessing = false;
} 
但是因为你评论说你得到了一个错误的答案

错误:字段初始值设定项无法引用非静态字段、方法或属性“CameraPreview.bProcessing”

这意味着您不能像这样内联引用
bProcessing
变量,因为它在对象实例化期间超出范围,您需要将调用移动到类构造函数

public class SomeClass
{
    private bool bProcessing;
    private Action DoImageProcessing; // bProcessing is out of scope here

    public SomeClass()
    {
        DoImageProcessing = () =>
        {
            bProcessing = true; // bProcessing is now in scope
            GetPoints();
            bProcessing = false;
        } 
    }

    private void GetPoints()
    {
        // implementation of GetPoints()...
    }
}

然后,无论应用程序通常在哪里调用
DoImageProcessing.run()
,您都需要调用
DoImageProcessing()
(也就是说,在
操作
变量名中添加括号以执行它)。

在Java中,这实际上是一个匿名类,它对
Runnable
接口进行子类化,并实现
run()
方法。也就是说,这是将其转换为.NET的正确方法。感谢@NightOwl888i对其进行的解释,但有一个错误:字段初始值设定项不能引用非静态字段、方法或属性“CameraPreview.bProcessing”@NightOwl888、@BrerrAllenSet,而不能在构造函数中而不是在声明中设置它。我将更新我的答案。@viswachikkala的答案现在已更新以解决该问题。您的问题与Xamarin无关,将作为离题而关闭。你应该改写你的问题,也许考虑共享你的java代码,简单地问一下等价的C是什么。尽管如此,即使这是边缘。同样地,我在转换时还面临着一个问题。私有最终int NONE=-1,TOUCH\u TOP\u FIRST=0,TOUCH\u TOP\u SECOND=1,TOUCH\u BOT\u THIRD=2,TOUCH\u BOT\u FOURTH=3;int currentTouch=无;这些声明在c#at int currentTouch=NONE中有错误;错误:字段初始化器无法引用非静态字段、方法或属性CameraPreview.NONE;我建议您提出一个新问题,并提供一个更完整的代码示例。此外,您可以通过在Google上搜索,例如“Java最终等效c#”,轻松找到其中的一些内容。