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

The User 0

Hectopat
Katılım
14 Eylül 2020
Mesajlar
2.117
Çözümler
42
Daha fazla  
Sistem Özellikleri
HP Laptop 15-da1083nt
Intel Core i5-8265U @ 1.60GHz
Intel UHD Graphics 620
NVidia GeForce MX130
WD NVMe 480GB
A-Data 8GB CL17 2400MHz
HP 22es 1080p 60Hz
HyperX PulseFire Raid
Cinsiyet
Erkek
Meslek
Öğrenci
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
 

Geri
Yukarı