C# bir Sözlükte Mağaza fonksiyonları
Nasıl fonksiyonları saklamak bir Sözlük oluşturulur?
Teşekkürler.
Kullanıcı tarafından gerçekleştirilen 30 fonksiyonları var. Fonksiyonu çalıştırmak için bu şekilde olmak istiyorum
private void functionName(arg1, arg2, arg3)
{
// code
}
dictionaryName.add("doSomething", functionName);
private void interceptCommand(string command)
{
foreach ( var cmd in dictionaryName )
{
if ( cmd.Key.Equals(command) )
{
cmd.Value.Invoke();
}
}
}
Ancak, işlev imzası hep aynı, böylece argümanlar farklı miktarda sahip değildir.
CEVAP
Bu gibi:
Dictionary<int, Func<string, bool>>
Bu bir dize parametresi olmayan fonksiyonların mağaza ve boolean dönmek için izin verir.
dico[5] = foo => foo == "Bar";
Ya eğer işlevi anonim ise:
dico[5] = Foo;
Foo böyle tanımlanır:
public bool Foo(string bar)
{
...
}
GÜNCELLEME:
Senin güncelleme gördükten sonra Önceden çağırmak istediğiniz işlevin imzası bilmiyorsun gibi görünüyor. .Tüm bağımsız değişkenler geçirmek gerekir bir işlevi çağırmak için ve eğer argümanlar bunu başarmak için tek yol olacak ne varsa yok NET yansıması ile.
Ve burada başka bir alternatif var:
class Program
{
static void Main()
{
// store
var dico = new Dictionary<int, Delegate>();
dico[1] = new Func<int, int, int>(Func1);
dico[2] = new Func<int, int, int, int>(Func2);
// and later invoke
var res = dico[1].DynamicInvoke(1, 2);
Console.WriteLine(res);
var res2 = dico[2].DynamicInvoke(1, 2, 3);
Console.WriteLine(res2);
}
public static int Func1(int arg1, int arg2)
{
return arg1 arg2;
}
public static int Func2(int arg1, int arg2, int arg3)
{
return arg1 arg2 arg3;
}
}
Bu yaklaşım ile hala sözlük ilgili dizindeki her bir işlev için geçirilmesi gereken parametre sayısı ve türünü bilmeniz gerekir veya çalışma zamanı hatası alırsınız. Ve eğer senin işlevler dönüş değerleri yok eğer doğru değilse System.Func<>
yerine System.Action<>
kullanın.
Android mağaza SQLite'veritabanı ...
Neden't Pylint-dahili fonksiyonla...
Neden pthreads’ durumu değişken fonksi...
Nasıl mağaza değişkenler için Açısal $...
&Quot;son" fonksiyonları C 11 kel...