2011-06-10 12 views
17

Şu an bir süredir uğraşıyorum ... Tamam, özür dilerim, bu kolay bir yoldur ama 'is' anahtar kelimesi gibi sınıf türlerini karşılaştırmak için F # içinde bir operatör var mı C# içinde? Tam uçurulmuş bir maç ifadesi kullanmak ya da bir şeyler yapmaya başlamak istemiyorum. ŞerefeBasit tip testi F #

cevap

25

Sen (match içinde) bir desen olarak hem :? yapısını kullanabilir veya bir operatör olarak: derleyici hala derleme sırasında bazı kontrolleri yapmaya çalışır, çünkü bu, farklı C# biraz daha davranır

let foo = bar :? System.Random 

-zaman. Örneğin, sonuç mutlaka false olurdu bu kullanmak için bir hatadır:

let bar = 42 
let foo = bar :? System.Random // Error 

Bu karışıklığa yol sanmıyorum, ama her zaman, obj için argüman dönüştürmek için box ekleyebileceğiniz her türlü karşı test edilebilir: isterseniz

let foo = box bar :? System.Random 
+0

Sanırım bunu yaptı ... Eğer etkileşimli pencerede onunla oynarsam, "Tip kısıtı uyuşmazlığı" hatalarını veriyorlar. gerçek editörde iyi çalışıyor gibi görünüyor. –

+0

@Ciemnl - Kafa karıştırıcı uyarıların olası kaynağı hakkında bazı bilgiler ekledim. Yine de "tip kısıtlaması uyuşmazlığı" nı nasıl alacağınızdan emin değilim. –

+1

Evet, bu yüzden ... derleyicinin işe yarayıp yaramadığını görmek için çok hızlı davrandım. F # 'yi hafife aldım! Bunu düşünmek için dile gelmekten çok etkilendim ... –