Arkadaşlar,

Elimde dinamik bir string var bu stringin sonucuna bool olarak ihtiyacım var. Nasıl yapabilirim?

// bu dinamik bir string içerisinde kaç tane and yada or olacağı belli değil

string val = "ad == 'ahmet' || ad == 'veli' ||ad == 'zeki' || (ad == "zeki" && soyad == 'ak')"

if(val)
{......}
else
{......}

soruldu: 02 Tem '14, 03:59

venividi's gravatar image

venividi
36569
cevap kabul oranı: 100%


Dinamik olarak kod oluşturup bu kodu compile ederek senin sorununa çözüm üretebiliriz. Aşağıdaki kod içine yorum satırları ile gerekli açıklamaları koydum bu nedenle başka bir açıklamaya gerek olmayacağını düşünüyorum. İyi çalışmalar

using System.Windows.Forms;
using Microsoft.CSharp;

private void button1_Click(object sender, EventArgs e)
{
    string val = "ad == 'ahmet' || ad == 'veli' ||ad == 'zeki' || (ad == \\"zeki\\" && soyad == 'ak')";

    //gelen string ifadeyi c# kod standartın dönüştürüyorum.
    val = val.Replace("'", "\\"");

    using (var provider = new CSharpCodeProvider())
    {
        //String olarak kodu yazıyoruz
        var code = @"public class KontrolClass{
                        public bool CheckMethod(string ad,string soyad) { 
                            if  (" + val+@"){
                                return true;
                            }
                            else
                            {
                            return false;
                            }
                        }   
                    }";

        var res = provider.CompileAssemblyFromSource(
            new CompilerParameters
            {
                GenerateInMemory = true
            },
            code
        );

        //oluşturmuş olduğum KontrolClass ismindeki class'ının tipini alıyorum
        var type = res.CompiledAssembly.GetType("KontrolClass");

        //KontrolClass 'ına ait bir instance oluşturuyorum
        var obj = Activator.CreateInstance(type);

        //KontrolClass' clasının içindeki CheckMethod metodunu ad=müslüm,soyad=öztürk parametereleri ile çalıştıyorum
        var result = type.GetMethod("CheckMethod").Invoke(obj, new object[] {"müslüm","öztürk" });

    }
}
permanent link

cevaplandı: 03 Tem '14, 02:19

M%C3%BCsl%C3%BCm%20%C3%96ZT%C3%9CRK's gravatar image

Müslüm ÖZTÜRK
10.7k103691
cevap kabul oranı: 28%

"public bool CheckMethod(string ad,string soyad)" metodu için ad-soyad parametreleri neden var? Sanki ihtiyaç yok gibi.

(03 Tem '14, 03:08) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

string val = "ad == 'ahmet' || ad == 'veli' ||ad == 'zeki' || (ad == \\"zeki\\" && soyad == 'ak')";

buradaki kodu incelediğimizde ad ve soyad birer property ve bu property' lerin değerleri ahmet,veli zeki ... mi diye kontrol ediliyor. Doğal olarak ad ve soyad properylerinin tanımlanmamış olması gerekiyor. Kodun daha gelen olması için propertylerin değerlerini dışardan göndermeyi tercih ettim

(03 Tem '14, 03:15) Müslüm ÖZTÜRK M%C3%BCsl%C3%BCm%20%C3%96ZT%C3%9CRK's gravatar image

Benim sorudan anladıgım, string bir condition geliyor, yani bu ornekteki gibi olmayabilir, mesela "deneme == 0 && x == 'xxx' || y >= 5" gibi bir değerde gelebilir. Bundan dolayı anlamlı gelmedi parametre gondermek.

(03 Tem '14, 03:19) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image
-1

Javada listedeki değeri contains bir method var belki bu şekilde yapılabilir csharp ile de.

HashSet<String> names = new HashSet<String>();

names.add("test");

if(names.contains("test")) {
    //TODO              
}
permanent link

cevaplandı: 02 Tem '14, 07:10

gklp's gravatar image

gklp
789317
cevap kabul oranı: 17%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238

Soruldu: 02 Tem '14, 03:59

Görüntüleme: 572 kez

Son güncelleme: 03 Tem '14, 03:19

powered by BitNami OSQA