هل هو قانوني و من الممكن الوصول إلى قيمة الإرجاع في النهاية كتلة ؟
سؤال
واود ان usererror السلسلة قبل أن يغادر دالة ، واعتمادا على رمز الإرجاع و متغير في الدالة.
لدي حاليا:
Dim RetVal as RetType
try
...
if ... then
RetVal = RetType.FailedParse
end try
endif
...
finally
select case RetVal
case ...
UserStr = ...
end select
end try
return RetVal
هل من الممكن استخدام عودة RetType.FailedParse ، ثم الوصول في النهاية كتلة ؟
المحلول
الطريقة الوحيدة للقيام بذلك في C# سيكون بتعريف متغير في بداية طريقة لعقد القيمة - أي
SomeType result = default(SomeType); // for "definite assignment"
try {
// ...
return result;
}
finally {
// inspect "result"
}
في VB ، قد تكون قادرة على الوصول إلى النتيجة مباشرة - منذ IIRC نوعا ما يعمل مثل ما ورد أعلاه (مع الأسلوب اسم "نتيجة") على أي حال.التحذير:أنا حقا لا VB الشخص...
نصائح أخرى
وتعريف متغير من كتلة المحاولة، وتحقق في منع أخيرا إذا كان قد تم تعيينه.
وكنت أتساءل عما إذا كان في VB يمكن للمرء أن (قانونيا) القيام به:
Public Function MyFunc() as integer
Try
if DoSomething() = FAIL Then
return FAIL
end if
Finally
if MyFunc = FAIL then
Me.ErrorMsg = "failed"
endif
End Try
End Function
وأنا أعرف وضع MyFunc = FAIL غير قانوني (كما هو شنق على من VB)، هو الكتابة فقط أو للقراءة؟ قلقي أن هذا هو سوء الترميز ك
if MyFunc = FAIL Then
ومشابه جدا ل
if MyFunc() = FAIL Then
والذي له عواقب مختلفة جدا!