【问题标题】:why Cannot implicitly convert type 'void' to 'bool'?为什么不能将类型'void'隐式转换为'bool'?
【发布时间】:2020-02-08 17:39:20
【问题描述】:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Diagnostics;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;

namespace ClassLibrary1
{
    public class Class1
    {
        public void open_swfile(string filepath, int x, string pgid)
        {
            SldWorks swApp = null;
            ModelDoc2 swAssemModleDoc = null;
            //SldWorks swApp;

            if (x == 0)
            {
                MessageBox.Show("no SolidWorks");
            }
            else if (x == 1)
            {
                System.Type swtype = System.Type.GetTypeFromProgID(pgid);
                swApp = (SldWorks)System.Activator.CreateInstance(swtype);
                //swApp.Visible = true;
                swAssemModleDoc = (ModelDoc2)swApp.ActiveDoc;
            }
        }

        public static void ProcessExited()
        {
            Process[] processes = Process.GetProcessesByName("SLDWORKS");

            foreach (Process process in processes)
            {
                if (process.ProcessName == "SLDWORKS")
                {
                    return true;
                }
            }

            return false;
        }

        public static void DoKillOnce()
        {
            Process[] processes = Process.GetProcessesByName("SLDWORKS");

            foreach (Process process in processes)
            {
                if (process.ProcessName == "SLDWORKS")
                {
                    try
                    {
                        process.Kill();
                    }
                    catch
                    {
                    }
                }
            }
        }

        public static void KILLSW()
        {
            if (ProcessExited())
            {
                do
                {
                    DoKillOnce();
                } while (ProcessExited());
                MessageBox.Show("Soldiworks process clean!");
            }
            else
            {
                MessageBox.Show("no process!");
            }
        }
    }
}

得到错误:

CS0103 当前上下文中不存在名称“MessageBox” ClassLibrary2 23 Active
错误 CS0127 由于“Class1.ProcessExited()”返回 void,因此返回关键字后面不能跟对象表达式 ClassLibrary2 40 Active
错误 CS0127 由于“Class1.ProcessExited()”返回 void,因此返回关键字后面不能跟对象表达式 ClassLibrary2 43 Active
错误 CS0029 无法将类型“void”隐式转换为“bool”ClassLibrary2 65 活动
错误 CS0029 无法将类型“void”隐式转换为“bool”ClassLibrary2 70 活动
错误 CS0103 当前上下文中不存在名称“MessageBox” ClassLibrary2 71 Active
错误 CS0103 当前上下文 ClassLibrary2 中不存在名称“MessageBox”2 75 活动

警告 NU1701 使用“.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4。 7.2, .NETFramework,Version=v4.8”not“.NETStandard,Version=v2.1”恢复包“SolidWorks.Interop 16.10.0”。此包可能与项目不完全兼容。类库2 1

【问题讨论】:

  • 嗨@sunne,如果解决方案适合您,请告诉我

标签: c#


【解决方案1】:

void 不是类型,更多的是没有类型。

这意味着方法不返回值。您正在尝试从声明为不返回值的方法返回一个值(在这种情况下为 true 或 false)。

如果要返回类型,则必须在方法上指定返回类型

public static bool ProcessExited() 
{
  return true;
}

【讨论】:

    【解决方案2】:

    进行以下更正:

    CS0103 当前上下文中不存在名称“MessageBox” ClassLibrary2 23 活动

    • 右键Project > Add > Reference > Assemblies > System.Windows.Forms

    错误 CS0127 由于“Class1.ProcessExited()”返回 void,因此返回 关键字后面不能跟对象表达式 ClassLibrary2 43 活跃

    • 将ProcessExited() 的返回类型从Void 更改为bool

    注意

    您可以使用内置属性Process.HasExited 来检查关联的进程是否已终止。

     if (process.HasExited==true)
     {
       //This process has exited, do something 
     } 
    

    【讨论】:

    • 谢谢。我一定会试一试……我已经坚持了好几个小时了
    • @sunne,你可以告诉我们进展如何
    猜你喜欢
    • 2014-07-29
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多