日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > C# > 正文

C#動態執行字符串(動態創建代碼)的實例代碼

2020-01-24 03:30:50
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

using System;
using System.Data;
using System.Configuration;
using System.Text;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;

namespace EvalGuy
{
    /// <summary>
    /// 本類用來將字符串轉為可執行文本并執行
    /// 從別處復制,勿隨意更改!
    /// </summary>
    public class Evaluator
    {
        #region 構造函數
        /// <summary>
        /// 可執行串的構造函數
        /// </summary>
        /// <param name="items">
        /// 可執行字符串數組
        /// </param>
        public Evaluator(EvaluatorItem[] items)
        {
            ConstructEvaluator(items);        //調用解析字符串構造函數進行解析
        }
        /// <summary>
        /// 可執行串的構造函數
        /// </summary>
        /// <param name="returnType">返回值類型</param>
        /// <param name="expression">執行表達式</param>
        /// <param name="name">執行字符串名稱</param>
        public Evaluator(Type returnType, string expression, string name)
        {
            //創建可執行字符串數組
            EvaluatorItem[] items = { new EvaluatorItem(returnType, expression, name) };
            ConstructEvaluator(items);        //調用解析字符串構造函數進行解析
        }
        /// <summary>
        /// 可執行串的構造函數
        /// </summary>
        /// <param name="item">可執行字符串項</param>
        public Evaluator(EvaluatorItem item)
        {
            EvaluatorItem[] items = { item };//將可執行字符串項轉為可執行字符串項數組
            ConstructEvaluator(items);        //調用解析字符串構造函數進行解析
        }
        /// <summary>
        /// 解析字符串構造函數
        /// </summary>
        /// <param name="items">待解析字符串數組</param>
        private void ConstructEvaluator(EvaluatorItem[] items)
        {
            //創建C#編譯器實例
            ICodeCompiler comp = (new CSharpCodeProvider().CreateCompiler());
            //編譯器的傳入參數
            CompilerParameters cp = new CompilerParameters();

            cp.ReferencedAssemblies.Add("system.dll");                //添加程序集 system.dll 的引用
            cp.ReferencedAssemblies.Add("system.data.dll");            //添加程序集 system.data.dll 的引用
            cp.ReferencedAssemblies.Add("system.xml.dll");            //添加程序集 system.xml.dll 的引用
            cp.GenerateExecutable = false;                            //不生成可執行文件
            cp.GenerateInMemory = true;                                //在內存中運行

            StringBuilder code = new StringBuilder();                //創建代碼串
            /*
             *  添加常見且必須的引用字符串
             */
            code.Append("using System; /n");
            code.Append("using System.Data; /n");
            code.Append("using System.Data.SqlClient; /n");
            code.Append("using System.Data.OleDb; /n");
            code.Append("using System.Xml; /n");

            code.Append("namespace EvalGuy { /n");                    //生成代碼的命名空間為EvalGuy,和本代碼一樣

            code.Append("  public class _Evaluator { /n");            //產生 _Evaluator 類,所有可執行代碼均在此類中運行
            foreach (EvaluatorItem item in items)                //遍歷每一個可執行字符串項
            {
                code.AppendFormat("    public {0} {1}() ",            //添加定義公共函數代碼
                                  item.ReturnType.Name,                //函數返回值為可執行字符串項中定義的返回值類型
                                  item.Name);                        //函數名稱為可執行字符串項中定義的執行字符串名稱
                code.Append("{ ");                                    //添加函數開始括號
                code.AppendFormat("return ({0});", item.Expression);//添加函數體,返回可執行字符串項中定義的表達式的值
                code.Append("}/n");                                    //添加函數結束括號
            }
            code.Append("} }");                                    //添加類結束和命名空間結束括號

            //得到編譯器實例的返回結果
            CompilerResults cr = comp.CompileAssemblyFromSource(cp, code.ToString());

            if (cr.Errors.HasErrors)                            //如果有錯誤
            {
                StringBuilder error = new StringBuilder();            //創建錯誤信息字符串
                error.Append("編譯有錯誤的表達式: ");                //添加錯誤文本
                foreach (CompilerError err in cr.Errors)            //遍歷每一個出現的編譯錯誤
                {
                    error.AppendFormat("{0}/n", err.ErrorText);        //添加進錯誤文本,每個錯誤后換行
                }
                throw new Exception("編譯錯誤: " + error.ToString());//拋出異常
            }
            Assembly a = cr.CompiledAssembly;                        //獲取編譯器實例的程序集
            _Compiled = a.CreateInstance("EvalGuy._Evaluator");        //通過程序集查找并聲明 EvalGuy._Evaluator 的實例
        }
        #endregion

        #region 公有成員
        /// <summary>
        /// 執行字符串并返回整型值
        /// </summary>
        /// <param name="name">執行字符串名稱</param>
        /// <returns>執行結果</returns>
        public int EvaluateInt(string name)
        {
            return (int)Evaluate(name);
        }
        /// <summary>
        /// 執行字符串并返回字符串型值
        /// </summary>
        /// <param name="name">執行字符串名稱</param>
        /// <returns>執行結果</returns>
        public string EvaluateString(string name)
        {
            return (string)Evaluate(name);
        }
        /// <summary>
        /// 執行字符串并返回布爾型值
        /// </summary>
        /// <param name="name">執行字符串名稱</param>
        /// <returns>執行結果</returns>
        public bool EvaluateBool(string name)
        {
            return (bool)Evaluate(name);
        }
        /// <summary>
        /// 執行字符串并返 object 型值
        /// </summary>
        /// <param name="name">執行字符串名稱</param>
        /// <returns>執行結果</returns>
        public object Evaluate(string name)
        {
            MethodInfo mi = _Compiled.GetType().GetMethod(name);//獲取 _Compiled 所屬類型中名稱為 name 的方法的引用
            return mi.Invoke(_Compiled, null);                    //執行 mi 所引用的方法
        }
        #endregion

        #region 靜態成員
        /// <summary>
        /// 執行表達式并返回整型值
        /// </summary>
        /// <param name="code">要執行的表達式</param>
        /// <returns>運算結果</returns>
        static public int EvaluateToInteger(string code)
        {
            Evaluator eval = new Evaluator(typeof(int), code, staticMethodName);//生成 Evaluator 類的對像
            return (int)eval.Evaluate(staticMethodName);                        //執行并返回整型數據
        }
        /// <summary>
        /// 執行表達式并返回字符串型值
        /// </summary>
        /// <param name="code">要執行的表達式</param>
        /// <returns>運算結果</returns>
        static public string EvaluateToString(string code)
        {
            Evaluator eval = new Evaluator(typeof(string), code, staticMethodName);//生成 Evaluator 類的對像
            return (string)eval.Evaluate(staticMethodName);                        //執行并返回字符串型數據
        }
        /// <summary>
        /// 執行表達式并返回布爾型值
        /// </summary>
        /// <param name="code">要執行的表達式</param>
        /// <returns>運算結果</returns>
        static public bool EvaluateToBool(string code)
        {
            Evaluator eval = new Evaluator(typeof(bool), code, staticMethodName);//生成 Evaluator 類的對像
            return (bool)eval.Evaluate(staticMethodName);                        //執行并返回布爾型數據
        }
        /// <summary>
        /// 執行表達式并返回 object 型值
        /// </summary>
        /// <param name="code">要執行的表達式</param>
        /// <returns>運算結果</returns>
        static public object EvaluateToObject(string code)
        {
            Evaluator eval = new Evaluator(typeof(object), code, staticMethodName);//生成 Evaluator 類的對像
            return eval.Evaluate(staticMethodName);                                //執行并返回 object 型數據
        }
        #endregion

        #region 私有成員
        /// <summary>
        /// 靜態方法的執行字符串名稱
        /// </summary>
        private const string staticMethodName = "__foo";
        /// <summary>
        /// 用于動態引用生成的類,執行其內部包含的可執行字符串
        /// </summary>
        object _Compiled = null;
        #endregion
    }
    /// <summary>
    /// 可執行字符串項(即一條可執行字符串)
    /// </summary>
    public class EvaluatorItem
    {
        /// <summary>
        /// 返回值類型
        /// </summary>
        public Type ReturnType;
        /// <summary>
        /// 執行表達式
        /// </summary>
        public string Expression;
        /// <summary>
        /// 執行字符串名稱
        /// </summary>
        public string Name;
        /// <summary>
        /// 可執行字符串項構造函數
        /// </summary>
        /// <param name="returnType">返回值類型</param>
        /// <param name="expression">執行表達式</param>
        /// <param name="name">執行字符串名稱</param>
        public EvaluatorItem(Type returnType, string expression, string name)
        {
            ReturnType = returnType;
            Expression = expression;
            Name = name;
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日韩精品在线免费看| 亚洲一区在线观看免费| 日韩在线欧美| 国产欧美日韩亚洲| 精品一区二区在线观看视频| 国产 欧美 在线| 欧美日韩中国免费专区在线看| 欧美久久久精品| 激情五月综合| 久久久久久欧美| 久久久久黄色| 91精品xxx在线观看| 国产成人精品三级| 日韩一级视频在线观看| 日韩中文欧美在线| 日韩在线观看精品| 国产午夜在线观看| 蜜桃久久久久| 日韩精品在线视频| 国产欧美日韩精品在线观看| 精品久久久视频| 亚洲一区激情| av丝袜在线| 一二三区精品视频| 中文天堂在线一区| 国产日韩精品视频| 国产欧美 在线欧美| 中文亚洲欧美| 欧美 日韩 国产在线| 中文字幕国产亚洲| 久久夜色精品国产噜噜亚洲av| 精品亚洲永久免费| 99国产成 人 综合 亚洲欧美 | 中文字幕第一页在线播放| 日本不卡免费高清视频| 中文官网资源新版中文第二页在线观看 | 91日韩中文字幕| 欧美变态tickling挠脚心| 日韩欧美国产高清91| 中文字幕高清在线播放| 亚洲欧美久久久| 欧美日韩中文字幕日韩欧美| 视频一区二区不卡| 国产欧美日韩中文字幕| 日韩精品中文字幕第1页| 一区二区中文视频| 91国内精品在线视频| 欧美日韩精品免费看| 欧美日韩中文国产| 精品国产91| 一级片免费在线播放| 中文字幕欧美日韩在线| 亚洲一区资源| 日韩欧美中文字幕在线播放| 国产欧美日韩不卡免费| 成人精品国产福利| 影音先锋中文字幕在线观看| 欧美日韩精品不卡| 国产 中文 字幕 日韩 在线| 国产欧美日产一区| va中文字幕| 国内精品99| 欧美日韩在线观看首页| 日韩一级中文字幕| 欧美日韩一级片在线观看| 欧美 日韩 国产 在线| 欧美一卡2卡3卡4卡| 日韩一级视频在线观看| 日韩1区在线| 日本精品免费观看高清观看| 91精品国产乱码久久蜜臀| 国产成免费视频| 91精品999| 中文字幕精品一区二| 亚洲女人天堂色在线7777| 日本精品免费观看高清观看| 国产成人精品999在线观看| 欧美日韩视频免费播放| 国产日韩精品电影| 亚洲一区在线观看免费| 久久久99免费| 日韩不卡在线播放| 日韩欧美国产成人精品免费| 国产欧美久久久精品影院| 亚洲第一视频| 一级片在线免费看| 欧美三级一区二区三区| va中文字幕| 欧美日韩激情在线一区二区三区| 欧美日韩中文字幕视频| 国产一级在线免费观看| 国产在线黄色片| 91麻豆精品国产91久久久使用方法| 精品成a人在线观看| 国产亚洲视频中文字幕视频| 欧美 亚洲 精品 三区| 亚洲乱码中文字幕综合| 欧美 日韩 国产在线观看| 日韩在线视频在线观看| 免费在线国产| 成人精品视频一区| 国产日韩精品在线| 一区二区三区视频网站| 在线国产一级| 亚洲大胆人体av| 在线视频国内一区二区| 在线手机中文字幕| 欧美一卡2卡三卡4卡5免费| 亚洲欧美日本另类| 日韩精品a在线观看91| 国产欧美日韩久久| 欧美日韩在线视频免费观看 | 国产对白在线| 欧美日韩一二三四| 国产一级片在线| 又黄又www的网站| 欧美一级搡bbbb搡bbbb| 日韩不卡一二三区| 中文字幕精品一区二区三区在线| 欧美日韩久久久| 国产三级在线| 午夜一区二区三区免费| 日韩欧美高清在线视频| 亚洲一区在线观看网站| 欧美日韩精品在线播放| 欧美在线中文字幕| 国内精品不卡| wwwwww国产| 国产高清精品在线| 色www精品视频在线观看| 蜜桃精品视频| 国产在线第一页| 男人的天堂网av| 久久精品电影| 中文字幕精品在线视频| 亚洲欧美中文字幕| 久久视频在线免费观看| 亚亚洲欧洲精品| 国产中文在线| 欧美天堂一区二区| 国产 欧美在线| 91精品国产91久久久久青草| 国产在线第一页| 国产在线www| 91国内在线| 国产不卡精品在线| 日韩国产欧美| xxxxx性| 日韩精品丝袜在线| 欧美日韩亚洲第一| 中文在线日韩| 日韩中文字幕| 亚洲成av人片在线| 日韩精品资源二区在线| 日韩色在线观看| wwwav91com| 91精品蜜臀在线一区尤物| 日韩欧美在线视频日韩欧美在线视频| 久久69成人| 日韩欧美在线视频日韩欧美在线视频 | 久久中文免费视频| 欧美日韩国产999| 日韩激情一区| 在线日韩精品视频| 欧美 日韩 国产在线观看| 亚洲一区在线观看视频| 99综合精品久久| 精品国产1区2区3区| 成人久久在线| 蜜桃精品视频| 久99久视频| 欧美成人二区| 欧美日中文字幕| 91久久中文| 一区二区三区鲁丝不卡| 国产网站av| 国产欧美日韩三级| 日韩视频精品在线观看| av最新网址| 91精品国产99| 日韩一级精品| 红桃视频亚洲| 欧美日韩国产观看视频| 精品一二三四区| 日韩中文字幕视频在线| 欧美一级免费在线观看| 日韩视频在线一区二区| 日韩精品视频中文在线观看| av免费观看国产| 91精品婷婷国产综合久久竹菊| 久久riav| 精品欧美久久久| 国产日韩三级| 日韩在线视频精品| 国产羞羞视频在线播放| 99久久婷婷| 91麻豆视频网站| 国产主播中文字幕| 国产成人精品999| 久久精品国产视频| 欧美日韩国产91| 91精品免费看| 欧美日韩国产在线播放| 中文字幕成人乱码在线电影| 国产999在线观看| 亚洲一区导航| √新版天堂资源在线资源| 亚洲一区精品在线| 91极品视频在线观看| 国产99精品| 中文字幕亚洲一区在线观看| 日韩美女视频一区二区在线观看| 在线手机中文字幕| 欧美亚洲天堂网| 亚洲狠狠婷婷综合久久久久图片| 在线精品观看| 69av亚洲| 国产三级中文字幕| 中文在线视频观看| 91久久精品视频| 日韩中文字幕亚洲| 日韩亚洲欧美中文三级| 在线视频你懂得一区| www高清在线视频日韩欧美| 中文字幕人成乱码在线观看| 国产自产视频| 日韩三级免费观看| 国产欧美日韩综合精品| 成人久久久久| 日韩视频一区在线观看| 亚洲欧洲综合另类| 在线一区二区不卡| 欧洲精品在线一区| a√免费观看在线网址www| 国产黄色网页| 高清1区2区| 久久综合久久综合九色| 欧美中文字幕在线视频| 日本免费在线视频不卡一不卡二| 日韩中文欧美| 国产h片在线观看| 日韩欧美亚洲国产一区| 69堂精品视频在线播放| 国产伦精品免费视频| 国产最顶级的黄色片在线免费观看| 91久久精品国产91久久| 黄色一区二区在线观看| 国产在线不卡一区| 欧美日韩国产综合视频在线观看| 国产成人精品三级| 欧美日韩在线视频一区| 在线观看精品国产| 日韩欧美高清在线视频| av免费观看网站| 欧美三级网址| 日韩精品视频在线免费观看| 影音先锋一区二区资源站| 欧美成人vr18sexvr| 日韩欧美中文字幕精品| 欧美一级在线观看| 精品乱人伦一区二区三区| 久久99久久久久| 亚洲欧美中文字幕在线一区| 久久riav| 国产蜜臀在线| 亚洲综合在线小说| 日韩欧美在线精品| 日韩三级精品电影久久久| 欧美日韩国产免费观看| 亚洲开心激情| 91精品国产综合久久久久| 亚洲综合在线小说| 久草视频观看| 国产日韩专区| 精品国产99| 日韩在线视频观看正片免费网站| 精品国产乱码久久久久久牛牛| 中文在线视频观看| 日韩精品久久久| 婷婷中文字幕一区三区| 1区2区3区在线视频| 一区二区三区在线不卡| 深夜福利一区二区| 在线视频国产三级| 亚洲免费观看视频| 91精品国产综合久久久久久| 国产欧美日韩最新| 中文在线日韩| 蜜桃久久av| 麻豆一区二区99久久久久| 不卡专区在线| 国产中文伊人| 色综合天天性综合| 日韩在线视频观看正片免费网站| 一区二区三区在线播| 中文在线视频观看| 黄色片网站在线| a视频在线播放| 国产绿帽一区二区三区| 欧美日韩国产首页| 国产中文在线| 免费国产h视频在线观看86| 亚洲高清中文字幕| 精品无人国产偷自产在线| 午夜一区二区三区视频| 99久久精品国产成人一区二区| 欧美日韩精品三区| 日韩欧美国产片| 欧美日韩国产首页在线观看| 日韩视频在线观看一区| 亚洲专区一二三| 99国内精品| 在线资源av| av一区在线观看| 国产黄色在线网站| 91精品国产日韩91久久久久久| 国内不卡的二区三区中文字幕| 欧美日韩中文字幕视频| 国产99在线 | 亚洲| 欧美日本精品在线| 欧美日韩高清| 国产欧美日韩不卡| 亚洲中文字幕一区| 在线黄色国产电影| 欧美 日韩 国产 在线| 日韩欧美中文字幕在线观看| 国产在线观看色| 亚洲高清视频一区| 国内国产区免费视频| 69av亚洲| 精品视频1区2区3区| 精品午夜av| 在线综合 亚洲 欧美中文字幕| av亚洲免费| 日韩视频专区| 精品国产1区二区| av影视在线看| 日韩美女中文字幕| www.久久草| 亚洲高清免费一级二级三级| 91精品国产综合久久精品app| 在线精品观看| 欧美黄页在线免费观看| 国产黄色在线播放| 亚洲欧洲在线观看av| 久久精品免费在线观看| 精品国产99久久久久久| 久久人人88| 国产婷婷色一区二区三区在线| 国产午夜精品一区二区三区视频| 一区二区三区在线|网站| 欧美大片在线观看一区| 日韩一级视频在线观看| 日韩国产91| 欧美日韩午夜在线视频| 国产黄色在线网站| 一区二区精品| 97久久精品午夜一区二区| 国产欧美日韩在线看| 中文字幕亚洲高清| 在线视频你懂得一区| 免费视频国产一区| 91精品久久久久久久91蜜桃| 日韩网站中文字幕| 日韩在线观看视频一区| 一区免费视频| 日韩av不卡在线观看| 成人精品视频一区| 中文字幕亚洲国产| 一区二区三区久久| 99精品视频国产| 视频在线一区二区| 亚洲二区自拍| 一级片在线免费看| 中文字幕 欧美 日韩| 国产日韩精品在线看| 精品国产免费观看一区| 日韩三级视频在线播放| 欧美日韩国产第一页| 亚洲第一福利视频在线| 国产一卡二卡3卡4卡四卡在线 | 日韩中文字幕久久| 欧美高清一区| 亚洲三级中文字幕| 中文字幕亚洲区| 日韩精品首页| 国产一二三精品| 一区在线播放视频| 日韩免费视频一区二区视频在线观看 | 视频一区二区不卡| 亚洲福利一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看| 欧美日韩亚洲国内综合网| 日韩一级网站| 一区二区三区精品久久久| www.中文字幕在线| 欧美激情视频一区二区三区在线播放| 国产欧美第一页| 国产一区三区三区| 欧美精品一区二区三区在线播放|