لا يمكن التحويل من خارج الضعف ؟ ' إلى 'مزدوج'

StackOverflow https://stackoverflow.com/questions/1603668

  •  05-07-2019
  •  | 
  •  

سؤال

لدي المقطع التالي من التعليمات البرمجية في التطبيق الذي أكتب:

    ...
    String[] Columns = Regex.Split(CurrentLine, Delimeter);
    Nullable<Double> AltFrom;
    ...
    if (AltFrom == null)
    {
       Double.TryParse(Columns[LatIndex].Trim(), out AltFrom);
    }
    ...

الخط في شرط إذا لن تجميع ويظهر الخطأ: لا يمكن التحويل من خارج الضعف ؟ ' إلى 'مزدوج'

إذا كنت لا تجعل AltFrom نوع قيم الفارغة بدلا صراحة أنها مزدوجة, كل شيء سعيدة.

بالتأكيد هذا هو رمز صالح.هل هذا مجرد خطأ في c# أو أفعل شيئا خاطئا ؟

هل كانت مفيدة؟

المحلول

أولا, لا يمكنك تحويل ضمنيا double? إلى double.والسبب هو لأن ما يمكن أن يكون قيمة double إذا كان double? تمثل null القيمة (أي ، value.HasValue هي كاذبة)?هذا هو تحويل من double? إلى double النتائج في فقدان المعلومات (وهو تضييق التحويل).ضمني تضييق التحويلات عموما مكروها في هذا الإطار.

لكن في الحقيقة المشكلة التي ترونه هنا هو شيء مختلف.عندما يكون لديك الطريقة التي تقبل out معلمة من نوع T, يجب أن تمر في متغير من نوع T;لا يمكن أن يكون هناك أي نوع الاختلاف في هذه الحالة كما يوجد مع غيرref وغيرout المعلمات.

للالتفاف حول المشكلة التالية:

if (AltFrom == null) {
   double value;
   Double.TryParse(Columns[LatIndex].Trim(), out value);
   AltFrom = value;
}

نصائح أخرى

لا المعلمة يحتاج فعلا إلى أن يكون double, لا Nullable<double>.

double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
    altFrom = temp;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top