لا يمكن التحويل من خارج الضعف ؟ ' إلى 'مزدوج'
-
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;
}