bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

(C#)表達(dá)式樹(shù)-創(chuàng)新互聯(lián)

需求是將一個(gè)string 表達(dá)式 轉(zhuǎn)換成 邏輯 表達(dá)式 并得到結(jié)果。(C#)表達(dá)式樹(shù)

例如: bool result = (key1==val1) || (key2!=val2) && (key3==val3). 其中 keyN, valN 均為變量。

創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、黃山區(qū)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)商城網(wǎng)站定制開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為黃山區(qū)等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

基本的思路是先做Express string 驗(yàn)證,然后進(jìn)行解析。

驗(yàn)證可以用正則表達(dá)式。

解析最基本的方法是用 表達(dá)式樹(shù) (Express Tree). PostFix.

C# linq 提供了一個(gè)解決方案就是 Linq 語(yǔ)法樹(shù)。

https://www.codeproject.com/Articles/74018/How-to-Parse-and-Convert-a-Delegate-into-an-Expre

目前較好的方法是用Microsoft 的 Dynamic Linq (http://msdn.microsoft.com/en-us/vcsharp/bb894665.aspx)

static void Main(string[] args)
        {
string[] exps = new string[]
            {
@" ""keyA"" !=""valA""",
@"keyA !=""valA""",
@"(keyA ==""valA"")",
@"keyA ==""val1"" || key2 ==""val2""",
@"key1 ==""val1"" && key2 ==""val2""",
@" key1 !=""val1"" || key2 ==""val2""&& key3 != ""val3""",
@"(key1 ==""val1"" || key2 ==""val2"")&& key3 != ""val3""",
            };

string pattern = @"(?<key>[wd_]+)""*s*(?<equality>==|!=)s*""*(?<value>[wd_]+)";

foreach (var exp in exps)
            {
// Parses to get the parameters.  string formattedExp = exp; 
var matches = Regex.Matches(exp, pattern);
                ParameterExpression[] parameters= new ParameterExpression[matches.Count]; 
for (int i =0; i < matches.Count; i++)
                {
                    Debug.Write(" key[" + matches[i].Groups["key"].Value);
                    Debug.Write("] equality[" + matches[i].Groups["equality"].Value);
                    Debug.Write("] value[" + matches[i].Groups["value"].Value +"]	
");

                    parameters[i]= Expression.Parameter(typeof(string), matches[i].Groups["key"].Value);

// Removing " if it has in keys.   if (exp.Contains(string.Format(@"""{0}""", matches[i].Groups["key"].Value)))
                    {
                        formattedExp= exp.Replace(string.Format(@"""{0}""", matches[i].Groups["key"].Value), matches[i].Groups["key"].Value); 
                    }
                }

var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(parameters, null, formattedExp);

string[] GotValues = new string[matches.Count]; 
if (GotValues.Length == 2)
               {
                   GotValues[0] = "val1";
                   GotValues[1] = "val2";
               }

if (GotValues.Length == 3)
               {
                   GotValues[0] = "val1";
                   GotValues[1] = "val2";
                   GotValues[2] = "val3";
               }

var result = e.Compile().DynamicInvoke(GotValues);

                Debug.WriteLine("{0} ---> {1}", e.ToString(), result); 
            }
        }

輸出如下:

 keyA => (keyA != "valA") ---> True
 key[keyA] equality[!=] value[valA]
keyA => (keyA != "valA") ---> True
 key[keyA] equality[==] value[valA]
keyA => (keyA == "valA") ---> False
 key[keyA] equality[==] value[val1]
 key[key2] equality[==] value[val2]
(keyA, key2) => ((keyA == "val1") OrElse (key2 == "val2")) ---> True
 key[key1] equality[==] value[val1]
 key[key2] equality[==] value[val2]
(key1, key2) => ((key1 == "val1") AndAlso (key2 == "val2")) ---> True
 key[key1] equality[!=] value[val1]
 key[key2] equality[==] value[val2]
 key[key3] equality[!=] value[val3]
(key1, key2, key3) => ((key1 != "val1") OrElse ((key2 == "val2") AndAlso (key3 != "val3"))) ---> False
 key[key1] equality[==] value[val1]
 key[key2] equality[==] value[val2]
 key[key3] equality[!=] value[val3]
(key1, key2, key3) => (((key1 == "val1") OrElse (key2 == "val2")) AndAlso (key3 != "val3")) ---> False

 參考:

https://stackoverflow.com/questions/821365/how-to-convert-a-string-to-its-equivalent-linq-expression-tree

新聞標(biāo)題:(C#)表達(dá)式樹(shù)-創(chuàng)新互聯(lián)
路徑分享:http://vcdvsql.cn/article34/cccjpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)App開(kāi)發(fā)軟件開(kāi)發(fā)定制開(kāi)發(fā)網(wǎng)站導(dǎo)航響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)