SORU
7 Kasım 2008, Cuma


Genel bir özellik yapma

Seri bir değeri depolar ve bir tür bir sınıf var. Özellik/yöntem döküm zaten: değer vermek istiyorum

public String Value { get; set; }

public Type TheType { get; set; }

public typeof(TheType) CastedValue { get { return Convert.ChangeType(Value, typeof(_Type)); }

Bu C mümkün#?

CEVAP
7 Kasım 2008, Cuma


Eğer sınıf özelliği içeren genel ise mümkün, ve genel parametre kullanarak: bu özellik bildirin

class Foo<TValue> {
    public string Value { get; set; }
    public TValue TypedValue {
        get {
            return (TValue)Convert.ChangeType(Value, tyepof(TValue));
        }
    }
}

Alternatif genel bir yöntem yerine kullanmak olacaktır:

class Foo {
    public string Value { get; set; }
    public Type TheType { get; set; }

    public T CastValue<T>() {
         return (T)Convert.ChangeType(Value, typeof(T));
    }
}

Ayrıca bir sınıf kendi dönüştürücü tanımlamak için izin beri System.ComponentModel.TypeConverter sınıfları dönüştürmek için kullanabilirsiniz.

Edit: derleyici bunu anlaması için bir yol vardır: genel yöntem çağrılırken, genel tür parametresi belirtmeniz gerekir unutmayın

Foo foo = new Foo();
foo.Value = "100";
foo.Type = typeof(int);

int c = foo.CastValue<int>();

Derleme türünü bilmek için zaman var. Eğer yazın bilmiyorsun eğer doğru değilse bu durumda Foo sınıfa aşağıdaki özellik ekleyebilirsiniz object: bir depolama olması gerekir

public object ConvertedValue {
    get {
        return Convert.ChangeType(Value, Type);
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • Phymec

    Phymec

    18 Temmuz 2009
  • tychoadragmire

    tychoadragmi

    20 Mart 2006