Site Meter & 線上人數

tracker

部落格觀察


我的噗浪

Google Latitude

微軟認證



聯絡我 - MSN & Skype & Email



最新回應

C# 版本的 Eval

2008/8/5 00:52| 閱讀數 : 4608 | 我要推薦 | One Comment | 文章分類: .NetFramework ASP.Net C# 訂閱

Eval 的功用就是把運算式字串,把運算式的結果回傳。例如:"3 +5" 的運算式字串,Eval 回傳 8"3 < 5" 的運算式字串,Eval 回傳 True。以下範例使用 CodeDom 方式來解議,該效能不是很好,請不要隨便亂用。

EvaluatorTest.aspx

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="EvaluatorTest.aspx.cs" Inherits="EvaluatorTest" %>
   2:   
   3:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4:  <html xmlns="http://www.w3.org/1999/xhtml">
   5:  <head runat="server">
   6:      <title>Evaluator Test</title>
   7:  </head>
   8:  <body>
   9:      <form id="form1" runat="server">
  10:      <div>
  11:          運算式:<asp:TextBox ID="txtStatement" runat="server" Text="3 + 3 > 5"></asp:TextBox>
  12:          <asp:Button ID="btnEval" runat="server" Text="Eval" OnClick="btnEval_Click" />
  13:          <br />
  14:          ( 請輸入運算式,例如: 3 + 2、3 - 2、3 + 2 == 5 或 3 > 2 等。)
  15:          <br />
  16:          <br />
  17:          結果:<asp:Label ID="lbResult" runat="server" ForeColor="Red" Font-Bold="true"></asp:Label>
  18:      </div>
  19:      </form>
  20:  </body>
  21:  </html>

EvaluatorTest.aspx.cs

   1:  using System;
   2:  using System.CodeDom.Compiler;
   3:  using System.Reflection;
   4:   
   5:  public partial class EvaluatorTest: System.Web.UI.Page
   6:  {
   7:      protected void btnEval_Click(object sender, EventArgs e)
   8:      {
   9:          lbResult.Text = Evaluator.Eval(txtStatement.Text.Trim()).ToString();
  10:      }
  11:  }
  12:   
  13:  public class Evaluator
  14:  {
  15:      public static object Eval(string statement)
  16:      {
  17:          return _evaluatorType.InvokeMember("Eval", BindingFlags.InvokeMethod, null, _evaluator, new object[] {statement});
  18:      }
  19:   
  20:      static Evaluator()
  21:      {
  22:          CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
  23:          CompilerParameters parameters;
  24:          parameters = new CompilerParameters();
  25:          parameters.GenerateInMemory = true;
  26:   
  27:          CompilerResults results;
  28:          results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
  29:   
  30:          Assembly assembly = results.CompiledAssembly;
  31:          _evaluatorType = assembly.GetType("Evaluator");
  32:          _evaluator = Activator.CreateInstance(_evaluatorType);
  33:      }
  34:   
  35:      private static readonly object _evaluator;
  36:      private static readonly Type _evaluatorType;
  37:      private static readonly string _jscriptSource = @"class Evaluator { public function Eval(expr : String) : String { return eval(expr); } }";
  38:  }

Demo 網頁試玩看看吧

(感謝 Dotjum 提供 LiveDemo 的網頁空間,LiveDemo 功能預計九月正式上線,各位會員敬請期待。)

DotBlogs Tags: .NetFramework ASP.NET C#


關連文章

回應

  • Sam 2009/6/17 上午 10:52 回覆

    # re: C# 版本的 Eval

    請教一下,要怎麼把c#程式碼貼上網誌後,還能像你的顯示的那麼漂亮阿?(我是用blogger)
標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 2 and 3 and type the answer here: