Aşağıdaki iki işlevi var, neredeyse aynı olan tek fark, birinin func
, diğer action
kullanmasıdır. Ve eğer mümkünse bunları tek bir işlevde birleştirmek istiyorum.C# yolu yazmak için void dönüşlü Func
cevap
Bu ikisini C# içinde tek bir işlevde birleştirmek mümkün değildir. C# ve CLR'deki void
, sadece bir tür değildir ve dolayısıyla boş olmayan bir işleve göre farklı dönüş anlamlarına sahiptir. Böyle bir modeli düzgün bir şekilde uygulayabilmenin tek yolu, boşluk ve boş olmayan delegeler için bir aşırı yük sağlamaktır.
CLR sınırlaması, her CLR dilinde yapmanın imkansız olduğu anlamına gelmez. Hiçbir değer döndürmeyen bir işlevi temsil etmek için void
'u kullanan dillerde yalnızca imkansızdır. Bu model, bir değer döndürmeyen yöntemler için void
yerine Unit
kullandığı için F # içinde çok yapılabilir.
Action
yöntemini uygulamak için ikinci bir Func<T>
sürümünüzü kullanarak Action uygulamasını bir lambdada paketleyerek kullanabilirsiniz. Bu, çoğaltılan kodların bir kısmını ortadan kaldırır.
private static void TryCatch(Action action)
{
Func<object> fun =>
{
action();
return null;
};
TryCatch(fun);
}
, bunu yaparken katılan ekstra havai Muhtemelen o uygulandığı şu anda sahip şekilde (özellikle orijinal versiyonu olmak olur ne kadar kısa ve basit verilmiş terk ediyorum, bu yüzden şahsen, orada bu durum).
+1 Alternatif sözdizimi için cevabımı bakın. –
Teşekkürler, önerildiği gibi olduğu gibi bırakacağım. Sucks Ben aslında tek bir fonksiyona indiremiyorum. – CaffGeek
@Chad Hayır - bunu bir tek liner yapabilirdiniz - ikiye böldüm, böylece neler olduğunu anlayabiliyordunuz, ama yönteminiz yeterince kısa, onu olduğu gibi bırakacağım. Yine de, yöntem aşırı yüklenmesini ortadan kaldırmanın bir yolu yok. –
Bunu, @ReedCopsey önerileri olarak yapıyorum. bu mümkün değil neden açıklama
private static void TryCatch(Action action)
{
TryCatch(() => { action(); return 0; });
}
Bir parametreyi Func'ye iletmeniz gerekiyorsa bunu nasıl yaparsınız? – Nicknow
- 1. C Dereference void * işaretçisi
- 2. C# böyle kod yazmak için alışkınım
- 3. C# Eylem ve Func parametresi aşırı yükleri
- 4. C# neden örtülü void kullanıyor?
- 5. Jasmine spyOn çoklu dönüşlü
- 6. Func
- 7. Hedef-c kategorisinde bir func ekleme
- 8. Hızlı bir şekilde çift dönüşlü dönüştüre dönüştürme
- 9. Javascript sözleri - çoklu dönüşlü geri aramalar
- 10. C# kod C# 3.0 satırında yazmak için daha iyi bir yolu var mı?
- 11. C# Func <> ve jenerikler
- 12. ISO C Void * ve Fonksiyon İşaretleyicileri
- 13. ‘void (myClass :: *)() öğesini void (*)() dönüştürebilir()
- 14. C# Func için Func <T1, object> dönüştürme <T1, T2>
- 15. Yazmak/res/çekilebilir/anında yazmak için?
- 16. main() fonksiyonu yazmak için (
- 17. Ayırtılı Func ve TimeSpan Birliği C#
- 18. C# 3.0 Func/OrderBy tür kesmesi
- 19. Func <T, TResult> için? .NET'te
- 20. C: 'de uint64_t dizisi için void işaretçiyi göster
- 21. C#/Win32 ile notepad'e yazı yazmak
- 22. görsel C++ değişken argüman listesi ile makro yazmak için bir yolu var mı?
- 23. C++ 'da yeni getiri (void *) var mı?
- 24. @infix func **() kullanarak üsler için ** nasıl kullanılır?
- 25. nasıl yöntemi için açıklama yazmak için
- 26. İfade - işaretçi hatalarını değerlendirmek için C++ şablonları yazmak?
- 27. C# FileStream: Büyük dosyaları yazmak için en uygun arabellek boyutu?
- 28. Bir raytracer yazmak, hangi cebir kitaplığı kullanmak için takılı (C++)
- 29. const void * ktiplerde işaretçi
- 30. Concatenate iki Func delegeler
Teşekkür:
Bu Bulduğum en basit sözdizimi. – CaffGeek