Je suis dans un comportement très étrange en C# /. NET 3.5 ...Vérification de référence nulle requise pour énumérer une collection dans un assemblage réfléchi?
J'écris une classe qui se connecte au pipeline de téléchargement d'un système de gestion de contenu. Le CMS exécute ce hook par réflexion.
Pour une raison inconnue, le code suivant échoue en lançant un NullRef ("Files" est un HttpFileCollection).
foreach (var fileKey in args.Files.AllKeys)
{
// Do Stuff
}
Après avoir ajouté un chèque de NullRef avant l'instruction fait réussir la boucle . Les fichiers téléchargés sont identiques dans les deux cas. L'instruction return n'est jamais exécutée, car la condition null échoue.
if (args.Files == null) return;
foreach (var fileKey in args.Files.AllKeys)
{
// Do Stuff
}
Je suis totalement déconcerté par cela. Des idées?
pleine Stack Trace
** Exception: System.Web.HttpUnhandledException **
Message: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Source: System.Web
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.sitecore_shell_applications_flashupload_advanced_uploadtarget_aspx.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
** Nested Exception **
Exception: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
Source: mscorlib
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at Sitecore.Reflection.ReflectionUtil.InvokeMethod(MethodInfo method, Object[] parameters, Object obj)
at Sitecore.Pipelines.Processor.Invoke(PipelineArgs args)
at Sitecore.Nexus.Pipelines.NexusPipelineApi.Resume(PipelineArgs args, Pipeline pipeline)
at Sitecore.Pipelines.Pipeline.Resume()
at Sitecore.Pipelines.Pipeline.DoStart(PipelineArgs args)
at Sitecore.Pipelines.Pipeline.Start(PipelineArgs args, Boolean atomic)
at Sitecore.Pipelines.Pipeline.Start(PipelineArgs args)
at Sitecore.Shell.Applications.FlashUpload.Advanced.UploadTarget.HandleUpload()
at Sitecore.Shell.Applications.FlashUpload.Advanced.UploadTarget.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
** Nested Exception **
Exception: System.NullReferenceException
Message: Object reference not set to an instance of an object.
Source: Sitecore.CustomExtensions
at Sitecore.CustomExtensions.StreamingMediaUploader.Process(UploadArgs args) in C:\...\Sitecore.CustomExtensions\StreamingMediaUploader.cs:line 33
Pouvez-vous fournir la trace de la pile complète de l'exception? – qbeuek
Votre vérification NullRef avant l'instruction fait à peine la boucle réussir, non? Cela vous fait revenir de la méthode ... –
Donc, après le contrôle, il n'est pas toujours NULL et il ne revient jamais, c'est-à-dire que cette vérification supplémentaire en fait toujours une valeur? – Aliostad