SORU
21 NİSAN 2010, ÇARŞAMBA


'#; C lar VB eşdeğer.'In Net DirectCast?

Bu muhtemelen önce soruldu, ama eğer varsa, onu bulamıyorum. Yok C# VB.NET bir eşdeğer'In DirectCast? Var olduğunu biliyorum () atan ve 'anahtar kelime, ama o çizgi CType ve TryCast.

Açık olmak gerekirse, bu anahtar kelimeler aşağıdakileri yapın;

() CType/ atmalarını: Eğer zaten doğru türde olup olmadığını, koyun, tipine bak dönüştürücü aksi ve onu çağırmak. Eğer herhangi bir tür dönüştürücü bulunursa, bir InvalidCastException atmak.

TryCast/"gibi" anahtar kelime: Eğer doğru tip, koyun, aksi takdirde null döndürür.

DirectCast: Eğer doğru tip, koyun, aksi halde bir InvalidCastException atmak.



EDİT: Yukarıda dile sonra, bazı insanlar hala yanıt yok () daha fazla, bu doğru değil, neden üzerine genişletmek istiyorum bu eşdeğerdir.

DirectCast yalnızca ya da miras ağaç dönüşümleri Genişletme Daralma için izin verir, farklı dallar arasında dönüşüm gibi desteklemiyor). yani: #, C derlenir ve çalışır:


  //This code uses a type converter to go across an inheritance tree
  double d = 10;
  int i = (int)d;


VB.Net bu DERLEME DEĞİL


  'Direct cast can only go up or down a branch, never across to a different one.
  Dim d as Double= 10
  Dim i as Integer = DirectCast(d, Integer)


Benim için C VB.Net eşdeğer# kodu CType


  'This compiles and runs
  Dim d as Double= 10
  Dim i as Integer = CType(d, Integer)


(Yeniden düzenleme, aslında dizeleri kullanıyordum,... pardon çift) olarak değiştirdim

CEVAP
21 NİSAN 2010, ÇARŞAMBA


İşlevselliği C DEĞİL istediğiniz açık görünüyor#. Bu olsa.. deneyin

    static T DirectCast<T>(object o, Type type) where T : class
    {
        if (!(type.IsInstanceOfType(o)))
        {
            throw new ArgumentException();
        }
        T value = o as T;
        if (value == null && o != null)
        {
            throw new InvalidCastException();
        }
        return value;
    }

Ya da, VB çağrısından farklı olsa da severim

static T DirectCast<T>(object o) where T : class
{
    T value = o as T;
    if (value == null && o != null)
    {
        throw new InvalidCastException();
    }
    return value;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • waterfairy17

    waterfairy17

    9 Aralık 2007
  • WK

    WK

    9 Ocak 2006