winform计算器
1.winform计算器
2.winform 音乐播放器引言
本次项目目的主要为了熟悉winform控件使用,以及学习Microsoft.CSharp的使用。
技术栈
C# winform
实现效果
设计与实现
按键使用button空间,计算算式以及计算结果使用label控件。运算核心使用Microsoft.CSharp,利用C#动态编译特性,将算式转换成源码,交给编译器计算。
//算式运算代码
public static double EvaluateExpression(string expression)
{
CSharpCodeProvider provider = new CSharpCodeProvider();//提供编译源码的方法
CompilerParameters parameters = new CompilerParameters();//提供编译过程中的各种参数
parameters.GenerateInMemory = true;//不生成物理文件,使用内存
//动态编译时需要指向它所需要的库
parameters.ReferencedAssemblies.Add("mscorlib.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
//CompilerResults存储编译后的结果
//@后定义的是c#源码
//编译器会将源码执行,自动进行算术运算,返回expression的结果
CompilerResults results = provider.CompileAssemblyFromSource(parameters, @"
using System;
public class ExpressionEvaluator
{
public static double Evaluate()
{
return " + expression + @";
}
}");
//编译出错返回
if (results.Errors.HasErrors)
{
throw new ArgumentException("Error compiling expression.", nameof(expression));
}
//通过反射获取程序集中的ExpressionEvaluator
Type evaluatorType = results.CompiledAssembly.GetType("ExpressionEvaluator");
//获取"Evaluate"方法
MethodInfo methodInfo = evaluatorType.GetMethod("Evaluate");
//返回结果(第一个null表示:调用静态方法,第二个null表示:方法没有参数)
return (double)methodInfo.Invoke(null, null);
}
挑战与解决方案
原本想要直接将算式String分解,一步一步运算,但是太麻烦,所以采用Microsoft.CSharp
本文作者:LotoLe
本文链接:https://www.cnblogs.com/CodeByte2002/p/18338553
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步