标签: nullreferenceexception

Visual Studio null引用警告 - 为什么没有错误?

我注意到Visual Studio特有的一些东西.首先,尝试在函数中的某处键入此(C#):

class Foo  
{  
    public void Bar()  
    {  
        string s;
        int i = s.Length;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,马上将迎来ss.Length是一个错误,说" Use of unassigned local variable 's'".另一方面,请尝试以下代码:

class Foo  
{  
    private string s;
    public void Bar()  
    {  
        int i = s.Length;
    }
}
Run Code Online (Sandbox Code Playgroud)

它将编译,并sprivate string s警告中强调中,并说" Field 'Foo.s' is never assigned to, and will always have its default value null".

现在,如果VS是那么聪明并且知道s将永远为null,为什么在第二个例子中得到它的长度不是错误?我最初的猜测是,"如果编译器根本无法完成其工作,它只会产生编译错误.由于代码在技术上运行只要你从不调用Bar(),它只是一个警告." 除非第一个例子使解释无效.只要你从不调用Bar(),你仍然可以毫无错误地运行代码.什么给出了什么?只是疏忽,还是我错过了什么?

c# compiler-construction nullreferenceexception visual-studio

5
推荐指数
1
解决办法
1040
查看次数

为什么'对象引用未设置为对象的实例'不是更具描述性?

作为开发人员,我们经常会遇到异常:NullReferenceException使用众所周知的错误消息:

你调用的对象是空的

.NET框架不可能返回更有意义的东西吗?

像这样的东西:

名为Y的X类型的对象未设置为对象的实例

.net nullreferenceexception

5
推荐指数
1
解决办法
718
查看次数

如何使用null参数调用委托?

如果我在调用期间尝试将null参数传递给委托,则会出现null异常.这是代码的样子:

        public void RequestPhoto()
        {
            WCF.Service.BeginGetUserPhoto(Contact.UserID,
                new AsyncCallback(RequestPhotoCB), null);
        }

        public void RequestPhotoCB(IAsyncResult result)
        {
            var photo = WCF.Service.EndGetUserPhoto(result);
            UpdatePhoto(photo);
        }

        public delegate void UpdatePhotoDelegate(Binary photo);
        public void UpdatePhoto(Binary photo)
        {
            if (InvokeRequired)
            {
                var d = new UpdatePhotoDelegate(UpdatePhoto);
                Invoke(d, new object[] { photo });
            }
            else
            {
                var ms = new MemoryStream(photo.ToArray());
                var bmp = new Bitmap(ms);
                pbPhoto.BackgroundImage = bmp;
            }
        }

问题在于:

Invoke(d, new object[] { photo });

如果变量"photo"为null.在调用期间传递null参数的正确方法是什么?谢谢!

c# delegates invoke nullreferenceexception

5
推荐指数
1
解决办法
1615
查看次数

什么是保护ASP.NET MVC中的NullReferenceExceptions的正确模式

更新 问题是语法问题.@awrigley显示了在Razor中编写它的正确方法.

以下作品:

@if(Model.Thing.Prop != null)
{
    Html.RenderPartial("SomePartialView", Model.Thing.Prop);
}
Run Code Online (Sandbox Code Playgroud)

您需要显示作为HTML表格Foo的给定顶部1的详细信息Bar.如果为空,如何隐藏空表或显示"未找到"消息Foo

例如.我正在接受NullReferenceException以下一行,因为Model.Thing.Propnull;

@{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 
Run Code Online (Sandbox Code Playgroud)

故意为null,我的Repository返回null而不是null Foo.但这有点撇开,即给定一个null Model.Thing.Prop,我不想打电话给Html.RenderPartial.

更新
我尝试了以下没有运气:

@if(Model.Thing.Prop != null)
{
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
}
Run Code Online (Sandbox Code Playgroud)

这导致Visual Studio告诉我它预期;第1行第1列也是第1行第1列;的无效表达式(我猜这是由于MVC3的预发布状态),如果我在我得到的浏览器中点击页面

CS1501:方法'Write'没有重载需要0个参数

@Html.RenderPartial突出显示该行.

我也试过了

@if(Model.Thing.Prop != null)
{
    <text>
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
    </text>
}
Run Code Online (Sandbox Code Playgroud)

但这会导致NullReferenceException我的部分视图中出现一个似乎不对的内容.Model.Thing绝对是有效的Bar,Model.Thing.Prop绝对是一个null Foo.

asp.net-mvc renderpartial nullreferenceexception razor asp.net-mvc-3

5
推荐指数
1
解决办法
2360
查看次数

扩展方法和成员方法:为什么编译器(内部)以不同方式实现每个方法?

考虑以下代码:

 A a = null;
 a.f(); //Will it throw NullReferenceException?
Run Code Online (Sandbox Code Playgroud)

请问以上投掷NullReferenceException

答案是:这取决于什么f().

这种差异导致了一个问题:C#编译器如何实现和查看每种类型的方法?另外,为什么成员方法必须抛出异常,即使它不访问任何成员数据?似乎C#编译器事先假设成员方法将访问成员数据,因此如果对象为null则抛出异常,因为无法访问使用null对象成员数据.但是,在扩展方法的情况下,它推迟此决定,直到它实际尝试使用空引用访问成员数据,然后才抛出异常.

我的理解到底有多远?如果是这样,为什么会出现这种差异呢?

是的,我知道如果f()是扩展方法,那么a.f()等同于写入AExt.f(a),因此后者不应该抛出异常,直到a用于访问成员.但我的重点主要放在编译器实现上(它可以以相同的方式实现成员方法).

c# extension-methods member nullreferenceexception

5
推荐指数
1
解决办法
140
查看次数

引发/生成空引用异常后的CLR实现是什么?

我们确实遇到过这个特殊问题,也是我们编码/开发生活日或其他日子中最常见的例外情况之一.我的问题是不是关于为什么(我知道它提出,当我们试图访问它实际上指向空引用变量的性质),但它是关于如何由CLR所产生的空引用异常.

有时我被迫认为用于标识对null的引用的机制(可能null是内存中的保留空间)然后通过CLR引发Exception.CLR如何识别并引发此特定异常.操作系统在其中扮演任何角色吗?

我想分享一个关于它的最有趣的主张:

null实际上是CLR已知的所有时间保留的内存空间,并且禁止所有类型的访问.因此,当找到该空间的引用时,它默认通过OS生成访问被拒绝的异常类型,这被CLR解释为NULL引用异常.

我没有找到支持上述陈述的任何文章或帖子,因此很难相信.可能由于我缺少挖掘细节或其他原因,我希望Stackoverflow是最合适的平台之一,我会得到最好的响应.

.net c# clr memory-management nullreferenceexception

5
推荐指数
1
解决办法
554
查看次数

自定义SpecFlow TestGeneratorProvider注册会在测试生成时导致NullReferenceException

我正在尝试在SpecFlow 1.9中添加我的CodedUI测试生成器插件.我正在尝试使用新的插件注册,因为旧的注册类型会在我们的解决方案中引起各种问题,因为我们不希望将自定义Generator Provider放在Specflow安装目录中(在每个开发人员计算机上都不同) .

我开始将新的Specflow.CustomPlugin NuGet包添加到.NET 4.0类库中.

基于CodedUI Generator的示例,我将它拼凑在一起:

using TechTalk.SpecFlow.Infrastructure;
[assembly: GeneratorPlugin(typeof(CodedUIGeneratorProvider.Generator.SpecFlowPlugin.CodedUIGeneratorPlugin))]

namespace CodedUIGeneratorProvider.Generator.SpecFlowPlugin
{
    using System.CodeDom;

    using BoDi;

    using TechTalk.SpecFlow.Generator;
    using TechTalk.SpecFlow.Generator.Configuration;
    using TechTalk.SpecFlow.Generator.Plugins;
    using TechTalk.SpecFlow.Generator.UnitTestProvider;
    using TechTalk.SpecFlow.UnitTestProvider;
    using TechTalk.SpecFlow.Utils;

    /// <summary>
    /// The CodedUI generator plugin.
    /// </summary>
    public class CodedUIGeneratorPlugin : IGeneratorPlugin
    {
        /// <summary>
        /// The register dependencies.
        /// </summary>
        /// <param name="container">
        /// The container.
        /// </param>
        public void RegisterDependencies(ObjectContainer container)
        {
        }

        /// <summary>
        /// The register customizations.
        /// </summary>
        /// …
Run Code Online (Sandbox Code Playgroud)

plugins configuration-files nullreferenceexception specflow

5
推荐指数
2
解决办法
4511
查看次数

关闭if大括号的NullReferenceException

我正在使用MVC和Razor视图.在这个特定的视图中,我传递的是该类的单个实例Bed.Bed有房产string Infection.现在在这个例子中,我HasInfection在视图中定义了一个布尔值,我在其他地方用它来改变显示的内容.这最初被宣布为

var HasInfection = (Model.Infection.Trim() != "";
Run Code Online (Sandbox Code Playgroud)

并按预期工作.但是,现在有一个用例Bed可能为null.这是第一个代码块:

@{
    ViewBag.Title = "Edit";
    var HasInfection = false;
    if (Model != null)
    {
        HasInfection = Model.Infection.Trim() != "";
    } // I get a NRE on this line whenever Model is null
}
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过复杂的嵌套if-else解决方案,而且我仍然在结束时得到一个NRE if.

if (Model.Infection == null)
{
    HasInfection = false;
}
else
{
    if (Model.Infection != "")
    {
        HasInfection = true;
    }
    else
    {
        HasInfection = false;
    } …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc nullreferenceexception razor

5
推荐指数
2
解决办法
1369
查看次数

App.Web_XXX.dll中发生System.NullReference异常 - 部分视图中出错

当我登陆我的一个MVC页面时,我收到此错误,在dll名称中有一个随机字符串.

App_Web_cjmhrrqn.dll中发生System.NullReferenceException类型的第一次机会异常.附加信息:未将对象引用设置为对象的实例.

在另一个页面上,当我点击页面上的第一行代码时,我会得到相似之处,无论它是什么:

App_Web_register.cshtml.5f83eb8c.gq-8jyy8.dll中发生System.NullReferenceException类型的第一次机会异常

但是,这不是代码的问题.我删除了它失败的行,并在下一行代码中继续失败.我甚至可以放几行新代码,它会在最后一行中断.

它发生在整个应用程序的几个地方.

它也发生在我的Azure部署上.

该错误无助于找到问题.

我的怀疑是某种DLL问题,但我已经清除了我的bin,obj和ASP.NET临时文件夹.

有谁见过这个问题,还是有什么想法?我需要清除其他任何临时文件夹吗?或者任何其他方法来缓解这个问题?为什么它仍然在我的现场网站上呢?

c# asp.net-mvc nullreferenceexception asp.net-mvc-partialview

5
推荐指数
1
解决办法
7751
查看次数

Sitecore“随机”对象引用未设置为对象的实例

今天早上我突然去上班,做了一个最新版本,然后我开始使用Sitecore 6.5,我的工作状况还不错

[NullReferenceException: Object reference not set to an instance of an object.]
   Sitecore.Shell.Applications.ContentEditor.Editors.Folder.FolderPage.Render() +358
   System.Web.UI.Control.LoadRecursive() +70
   System.Web.UI.Control.LoadRecursive() +189
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3177
Run Code Online (Sandbox Code Playgroud)

另外,有时在打开文件夹时出现此错误:

>    [InvalidOperationException: The Sitecore.Client.Device is null.]
>     Sitecore.Client.get_Device() +86    Sitecore.UIUtil.GetBrowserClassString() +326   
> Sitecore.sitecore.login.LoginPage.AddBrowserAttributes() +135   
> Sitecore.sitecore.login.LoginPage.OnPreRender(EventArgs e) +435   
> System.Web.UI.Control.PreRenderRecursiveInternal() +113   
> System.Web.UI.Page.ProcessRequestMain(Boolean
> includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
>         +4297
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决它?

c# sitecore device nullreferenceexception

5
推荐指数
1
解决办法
670
查看次数