2009-08-17 16 views
9

Ben nitpicking biliyorum. Ancak IConvertible arabirimini, yalnızca bir boole değeri (ve dolayısıyla yalnızca iki durumu) içeren bir yapı üzerinde uygularken, IConvertible.GetTypeCode()'dan dönmek için önerilen değer nedir? Yapı örtülü olarak dönüştürülebilir ve boole ile karşılaştırılabilir ve neredeyse dize ve XML gösterimi dışında her yönüyle etkin bir şekilde bir boole.IConvertible.GetTypeCode Uygulaması

TypeCode.Boolean döndürürsem ancak TypeCode.Object gereksiz yere belirsiz görünüyorsa çerçeveye yalan söylüyorum gibi hissediyorum. Bu yöntemi kendi yapılarınızda uygulamak için gerçek dünyadaki herhangi bir sonuç var mı?

temsil TypeCode.Boolean için açıklamasına dayanarak

IConvertible.GetTypeCode on MSDN

cevap

3

Bunu yapabilirsiniz - ama dikkatli olun.

Birçok rutin, doğrudan GetTypeCode'u kullanır ve yapınız bunlardan birine geçerse bu bir etki yapabilir. TypeCode.Boolean'ı döndürmek için GetTypeCode'u geçersiz kılarsanız, bu yordamlar, yapınızın tek yan etkileri olan veya olmayan bir boole olduğunu varsayar. Pratikte, örneklerin çoğu (örneğin VB'nin IsNumeric rutini gibi) sayısal türleri kontrol eder, bu yüzden bir boole TypeCode muhtemelen bunu etkilemez, ancak bunun bir etkisi olabileceği başka durumlar da vardır. Bazı ORM'ler, örneğin, bir türün kaydedilmesini ve yüklenmesini yönetmek için tip kodunu kontrol eder. Eğer yapınızın dünyayı bir bool olduğunu düşünmesini istiyorsanız, bu sizin türünüzün aslında bir Boolean olmadığının daha az açıklığa kavuşturulmasına yardımcı olabilir ... ama aynı zamanda ince sorunlara da neden olabilir.

+2

Teşekkürler, ben de Reflector'u kontrol ettim ve System.Variant.MarshalHelperConvertObjectToVariant gibi ona erişen bir çift düşük seviyeli yöntem buldu. Sanırım alt satırda, bir boolean olarak tanıtımı yapmam için hiçbir sebep yok. Bu nedenle, en iyi eylem dizisi, TypeCode.Object öğesinin döndürülmesi gibi görünüyor. – Josh

+0

Bunu yapmak için güçlü bir nedeniniz olmadıkça tavsiye ederim. Bunu Boole'ye ayarlamak, istenmeyen sonuçlara neden olabilir. –

1

"doğru veya yanlış Boole değerlerini temsil eden basit bir tür". Bu, yapınızın tanımına uyuyor gibi görünüyor, çünkü yalnızca bir Boole değeri içerdiğini ve aralarında dolaylı olarak dönüştürülebilir olduğunu söylediniz.