ile geçerli değil Geçerli değeri kontrol eden bu işleve sahibim. Geçerli değer (1 parametresi) null veya boş olduğunda, o zaman kod yukarıda kısmen düzgün çalışıyor ... Ama geçilmesinin varsayılan değer (2 menü noktası)Belirtilen satır genel
public static T ZeroNull<T>(object currentValue, T defaultValue)
{
if (currentValue.Equals(DBNull.Value))
return (T)defaultValue;
else if (currentValue.Equals(string.Empty))
return (T)defaultValue;
else
return (T)currentValue;
}
kullanır Ben kodu gibi kullandığınızda Bu, bu
float currValue = 20.1f;
int i = ZeroNull<int>(currValue, 0); // Specified cast is not valid
int i = ZeroNull<int>("10", 0); // Specified cast is not valid
Herkes yukarıdaki kod snip artırabilir " ... Belirtilen atama geçerli değil" bir atar? Ve derleyici neden bu hatayı atıyor?
Selamlar, Jessie
karşılaştığınız mesele sizden T Tipi int olduğunda T'ye currValue döküm yoluyla yapmaya çalıştığımız şey olan int Dize döküm olamaz olmasıdır
sorun 'currValue' bir kutulu şamandıra (20.1f) 'dir ve sizin geçerli olmayan bir int için Unbox çalışıyor olmasıdır: jenerik Bu deneyin olmadan, aynı zamanda bir
InvalidCastException
atacağım yeniden oluşturmak için. Aynı şey "10" – chombaiçin de geçerlidir. Chomba'ya teşekkürler, ancak bunu yaptığımda neden bir hata atmıyor. 'code'float currValue = 10.2f; 'code'int newCurrValue = (int) currValue; Sadece aynı mantığa sahip olduklarını farz ediyorum? – klaydze
Bunun nedeni, yalnızca türler arasında açık bir şekilde yayın yapmaktır. Bununla birlikte, bir değer türünde bir kutu oluşturduğunuzda, önce alttaki türdeki kutudan çıkarmanız gerekir. – chomba