Tamam, önceki yanıtla değiştirin. Çünkü Int64
ile Double
arasında örtük bir dönüşüm var (ancak tam tersi değil), bu ifadenin sonuç türü olacaktır. Yani, bir kutulu Int64
almayı beklediğinizde, aslında bir kutulu Double
(ancak orijinal olarak Int64.Parse
'dan gelen bir değerle) elde edersiniz.
Sadece yeterince açık olmaması durumunda, return
ifadelerini, yalnızca bir değişken döndürecekleri şekilde değiştirelim. uygun
private static object ParseNumber(string token, FieldDefinition def)
{
if (def.Fraction > 0)
return Double.Parse(token);
else
return Int64.Parse(token);
}
dönüştürme:
private static object ParseNumber(string token, FieldDefinition def)
{
if (def.Fraction > 0)
{
double d = Double.Parse(token);
object boxed = d; // Result is a boxed Double
return boxed;
}
else
{
long l = Int64.Parse(token);
object boxed = l; // Result is a boxed Int64
return boxed;
}
}
Ve şimdi koşullu operatör ile sürümüne aynı yapalım:
private static object ParseNumber(string token, FieldDefinition def)
{
return def.Fraction > 0 ? Double.Parse(token) : Int64.Parse(token);
}
private static object ParseNumber(string token, FieldDefinition def)
{
// The Int64.Parse branch will implicitly convert to Double
double d = def.Fraction > 0 ? Double.Parse(token) : Int64.Parse(token);
object boxed = d; // *Always* a Double
return boxed;
}
olur İşte orijinal kod
DÜZENLEME: Reque olarak Sted, biraz daha fazla bilgi. forma
X ? Y : Z
bir koşullu ifade tip I TY
ve TZ
arayacağım Y
ve Z
türleri bağlıdır. Birkaç seçenek vardır:
TY
ve TZ
aynı tip şunlardır: Sonuç o türüdür
TY
den TZ
için değil TZ
den TY
bir örtük dönüştürme vardır: Sonuç tipi TZ
ve taşımaktadır ilk dal kullanılıyorsa dönüşüm kullanılır.
TZ
değil TY
den TZ
için TY
açıklamakla beraber örtük dönüştürme vardır: Sonuç tipi TY
sahiptir ve ikinci dalı kullanılırsa dönüşüm kullanılır.
- her iki yönde bir örtük dönüştürme vardır: derleme zamanı hatası
- hiç dönüşüm her iki şekilde vardır: Hata
bu yardım mı derleme zamanı?
http://cznp.com/s/7JM –