C# girilen yazıya göre void çalıştırma

Katılım
14 Eylül 2020
Mesajlar
2.897
Çözümler
70
Yer
İstanbul
Bir konsol uygulamasında kullanıcıdan istenen yazı sonucu o kodu çalıştırmak istiyorum. Yani eğer kullanıcı konsola "about" girerse "Apps.About.Start();" komutunun çalışmasını istiyorum. Aynı şey başka komutlar için de olur. Yani kullanıcı "deneme" girerse "Apps.Deneme.Start();" komutunun çalışmasını istiyorum. Kodum şu şekilde:

[CODE lang="csharp" title="KODUM"]
public static void runCMD(string lineCmd)
{
if (lineCmd == "")
{
Console.WriteLine("Blank command. Use ? command to get help.");
}
else
{
//KODLAR BURAYA GELSİN
}

/*YAPMAK İSTEDİĞİM BUNLARI KISALTMAK. ÖRNEK OLARAK AZ VERDİM AMA YAKLAŞIK 50 TANE KOMUT VAR.


string input = lineCmd;

if (input == "about")
{
Apps.About.Start();
}
else if (input == "echo")
{
Apps.Echo.Start();
}
else if (input == "math")
{
Apps.Math.Start();
}*/
}
[/CODE]
 
Son düzenleyen: Moderatör:
C#:
main(){
    if (deger == 1){
        v1();
    }else if(deger == 2){
        v2();
    }else if (deger == 3){
        v3();
    }else{
        MessageBox.Show("Lütfen geçerli bir değer giriniz");
    }
}

public void v1(){
           MessageBox.Show("Değer 1 geldi");
}

public void v2(){
           MessageBox.Show("Değer 2 geldi");
}

public void v3(){
              MessageBox.Show("Değer 3 geldi");
}
 
C#:
main(){
    if (deger == 1){
        v1();
    }else if(deger == 2){
        v2();
    }else if (deger == 3){
        v3();
    }else{
        MessageBox.Show("Lütfen geçerli bir değer giriniz");
    }
}

public void v1(){
           MessageBox.Show("Değer 1 geldi");
}

public void v2(){
           MessageBox.Show("Değer 2 geldi");
}

public void v3(){
              MessageBox.Show("Değer 3 geldi");
}
Ama yaklaşık 50 tane komut var ve kullanıcı kendisi de komut ekleyebiliyor. Ben bir şekilde 50 tane komut için kopyala yapıştır ile yapabilirim ama bu şekilde kullanıcı kendi komutunu ekleyemez.
 
Tam olarak yapmak istediğiniz şey nedir?
Girilen yazıyı komuta çevirmek. Yani kullanıcının girdiği yazı komut olarak çalıştırılabilsin. Şunun gibi bir kod:
[CODE lang="csharp" title="Örnek kod"]
string girilen = "xyz";
Command.Execute("Apps." + girilen + ".Start();");
[/CODE]
 
Girilen yazıyı komuta çevirmek. Yani kullanıcının girdiği yazı komut olarak çalıştırılabilsin. Şunun gibi bir kod:
Direkt şekilde mümkün değil diye biliyorum. Aynı işlevi yapacak bir şey aklıma geldi. Birazdan yazacağım ama bir sorun var. Farkında mısın bilmiyorum ama bu durumda ben armut yazsam armut fonksiyonunun çalışması lazım. Armut fonksiyonunu kim tanımlayacak? İçinde ne olacak?

Kullanıcıların tanımlamadığı ama senin tanımladığın fonksiyonlar olduğunu düşünelim. Bunları array'e atarsın. Sonra da map ile kullanıcı neyin ne olduğunu belirler.
 
Yani kullanıcının yazdığı yazı kod olarak çalıştırılsın istiyorum.
Direkt şekilde mümkün değil diye biliyorum. Aynı işlevi yapacak bir şey aklıma geldi. Birazdan yazacağım ama bir sorun var. Farkında mısın bilmiyorum ama bu durumda ben armut yazsam armut fonksiyonunun çalışması lazım. Armut fonksiyonunu kim tanımlayacak? İçinde ne olacak?
Yazdığınız fonksiyon eğer Apps klasöründe varsa yani Armut.cd varsa çalıştırcak ama eğer yoksa çalıştırmayacak. Yani ben Apps klasörüne öyle bir şey eklemedim ama belki kullanıcı eklemek isteyebilir. O zaman onu da çalıştırsın.
 
Girilen yazıyı komuta çevirmek. Yani kullanıcının girdiği yazı komut olarak çalıştırılabilsin. Şunun gibi bir kod:
[CODE lang="csharp" title="Örnek kod"]
string girilen = "xyz";
Command.Execute("Apps." + girilen + ".Start();");
[/CODE]

Hocam iç içe döngü ile olabilir diyeceğim ancak bir hata üretirse programı çökertir. Karmaşık biraz. Birkaç şey deneyeceğim.
 
Stack Overflow'da gördüğüm örnek:
C#:
private void ButtonClick(){
    string goVoid;
    goVoid = textBox1.Text; //Kullanıcının"testVoid" yazdığını düşünelim.
    goVoid();
}

testVoid(){
    //Kod
}

Bu paylaştığım kod benim birinin Windows.Forms'ta yapmak istediği şey ve buna cevap olarak şu kod gelmiş:

C#:
string methodName = "testVoid";
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(methodName);
theMethod.Invoke(this, null);

Ama ne yazık ki ben bunu konsol projesi olarak çalıştırdığım için bende this yok. Bu yüzden hata veriyor.

Bu link: Call a void from a string
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı