هل هو قانوني و من الممكن الوصول إلى قيمة الإرجاع في النهاية كتلة ؟

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

سؤال

واود ان 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

والذي له عواقب مختلفة جدا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top