if (node.data.type !== 'category' || node.data.type !== 'topic') { createMessage.error(errorText); return; }优化语句
时间: 2024-02-02 11:03:13 浏览: 118
可以将逻辑运算符 `||` 改为逻辑运算符 `&&`,并将两个条件的逻辑取反,即:
```
if (!(node.data.type === 'category' && node.data.type === 'topic')) {
createMessage.error(errorText);
return;
}
```
这样,只有当 `node.data.type` 同时不是 `'category'` 和 `'topic'` 时,才会显示错误信息。这样可以避免原先的逻辑错误,同时也使代码更加清晰易懂。
相关问题
if (node.data.type === 'category' || node.data.type === 'topic') { if (node.children.length) { // 服务节点移动,且被移动的节点成为子节点,node为其父节点:传当前id、结束时的父节点id和下一个id payload.afterId = node.children[0]?.key; payload.parentId = node.data.id; } else { // 当node中的children没有值时,表示拖拽结束时(拖动至另一个分类)的分类节点中没有服务节点 // 此时当前被拖拽的节点成为其唯一一个节点,此时只需传值父节点 payload.parentId = node.data.id; } } else { createMessage.error(errorText); return; }优化
可以使用逻辑运算符 `&&` 将两个 if 语句合并为一个 if 语句,从而避免代码重复,例如:
```
if (node.data.type !== 'category' && node.data.type !== 'topic') {
createMessage.error(errorText);
return;
}
if (node.children.length) {
// 服务节点移动,且被移动的节点成为子节点,node为其父节点:传当前id、结束时的父节点id和下一个id
payload.afterId = node.children[0]?.key;
payload.parentId = node.data.id;
} else {
// 当node中的children没有值时,表示拖拽结束时(拖动至另一个分类)的分类节点中没有服务节点
// 此时当前被拖拽的节点成为其唯一一个节点,此时只需传值父节点
payload.parentId = node.data.id;
}
```
这样,当 `node.data.type` 不是 `'category'` 或 `'topic'` 时,就会显示错误信息并直接返回,否则就会执行后续的代码逻辑。这样可以使代码更加简洁明了,也可以避免代码重复。
using CodeEditor.CodeEdit; using Microsoft.CSharp; using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CodeEditor { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void btnCompile_Click(object sender, EventArgs e) { //【1】新建C#代码生成器和代码编译器的实例 CodeDomProvider Provider = CodeDomProvider.CreateProvider("CSharp"); //【2】配置用于调用编译器的参数 CompilerParameters Parameters = new CompilerParameters(); Parameters.ReferencedAssemblies.Add("System.dll"); Parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); Parameters.ReferencedAssemblies.Add("System.Linq.dll"); Parameters.GenerateExecutable = false; Parameters.GenerateInMemory = true; //【3】启动编译 CompilerResults Result = Provider.CompileAssemblyFromSource(Parameters, rtbCode.Text); if (Result.Errors.HasErrors) { AppendInfo("编译错误:"); foreach (CompilerError err in Result.Errors) { AppendInfo(err.ErrorText); } } else { // 通过反射,调用实例 Assembly objAssembly = Result.CompiledAssembly; object objHelloWorld = objAssembly.CreateInstance("CodeEditor.CodeEdit.Code"); MethodInfo objMI = objHelloWorld.GetType().GetMethod("Test"); object ReValue = objMI.Invoke(objHelloWorld, null); AppendInfo(ReValue); } } //追加字符 private void AppendInfo(object Info) { rtbResult.Text =Info+"\n\r"; } } }
这段代码是一个简单的代码编辑器程序的主窗体部分。它包含一个按钮(btnCompile)和两个文本框(rtbCode和rtbResult)。当用户点击按钮时,程序会将文本框中的C#代码编译并执行。
在点击按钮事件的处理方法(btnCompile_Click)中,代码首先创建了一个C#代码生成器(CodeDomProvider)和一个代码编译器(CompilerParameters)的实例。然后配置编译器参数,包括引用的程序集和编译选项。接下来,调用编译器的CompileAssemblyFromSource方法,将文本框中的代码作为参数进行编译。
如果编译过程中出现错误,则将错误信息逐一添加到结果文本框(rtbResult)中显示。否则,通过反射获取编译后程序集中的类(CodeEditor.CodeEdit.Code)实例,并调用其中的名为"Test"的方法。最后,将方法返回值添加到结果文本框中显示。
另外,代码中还包括一个私有方法(AppendInfo),用于将信息追加到结果文本框中。
请问你对以上代码有什么疑问吗?
阅读全文