从 VB.NET 转换为 C# 时无法分配给,因为它是一个方法组

Cannot assign to because it's a method group, when converting from VB.NET to C#

代码如下:

public abstract class OSHelper
{
    public static bool IsAppAlreadyRunning()
    {
        IsAppAlreadyRunning = false;

        try
        {
            // Current Running Process (this launched app)
            string currentRunningProcessName = Process.GetCurrentProcess().ProcessName;

            // Get ALL Running Processes
            Process[] allRunningProcessNames = Process.GetProcessesByName(currentRunningProcessName);

            if (allRunningProcessNames.Length > 1)
                IsAppAlreadyRunning = true;
        }
        catch (Exception ex)
        {
            // Log.Write(ex);
        }
    }
}

当我尝试将 false 分配给 IsAppAlreadyRunning 时失败?

已将 VB.NET 代码转换为 C# ... 在 VB.NET 中运行良好,但 C# 似乎有问题?在 VB.NET 中,这基本上是一个 class,不需要实例来访问它的方法。

我错过了什么?或者这只是 C# 不支持的东西?

VB.NET returns 通过将值分配给方法名称来从方法中获取值。

C# 不是那样工作的。请改用 return 语句。

public static bool IsAppAlreadyRunning()
{
    try
    {
        // Current Running Process (this launched app)
        string currentRunningProcessName = Process.GetCurrentProcess().ProcessName;

        // Get ALL Running Processes
        Process[] allRunningProcessNames = Process.GetProcessesByName(currentRunningProcessName);

        if (allRunningProcessNames.Length > 1)
            return true;
        // Or replace above 2 lines with
        //    return allRunningProcessNames.Length > 1;
    }
    catch (Exception ex)
    {
        // Log.Write(ex);
    }

    return false;
}

IsAppAlreadyRunning 是 C# 代码中的一个函数,因此您不能分配给它。试试这个:

public static bool IsAppAlreadyRunning()
{
    bool retVal = false;

    try
    {
        // Current Running Process (this launched app)
        string currentRunningProcessName = Process.GetCurrentProcess().ProcessName;

        // Get ALL Running Processes
        Process[] allRunningProcessNames = Process.GetProcessesByName(currentRunningProcessName);

        if (allRunningProcessNames.Length > 1)
        {
            retVal = true;
        }
    }
    catch (Exception ex)
    {
        // Log.Write(ex);
    }
    return retVal;
}
  1. 方法和变量不能共享名称。将其重命名为其他名称。
  2. 您需要声明变量,即 bool IsAppAlreadyRunningVar = false;
  3. 您需要确保每个代码路径中的 return 值 (bool)。如果此条件 if (allRunningProcessNames.Length > 1) 失败会怎样?

方法的名称是 IsAppAlreadyRunning。您不能将 true/false 分配给它。

我猜您想确定是否有具有指定进程名称的活动进程。

试试这个:

public abstract class OSHelper
{
    public static bool IsAppAlreadyRunning()
    {
        try
        {
            // Current Running Process (this launched app)
            string currentRunningProcessName = Process.GetCurrentProcess().ProcessName;

            // Get ALL Running Processes
            Process[] allRunningProcessNames = Process.GetProcessesByName(currentRunningProcessName);

            return allRunningProcessNames.Length > 1;
        }
        catch (Exception ex)
        {
            // Log.Write(ex);
        }
        return false;
    }
}