标签: nullreferenceexception

为什么'{'在静态方法中抛出NullReferenceException?

这个有点深奥.尝试在visual studio 2008中的winforms项目中打开表单(在winforms设计器中)时遇到了NullReferenceException.堆栈跟踪指向以下代码的第四行:

public static class Logger
{
    public static void LogMethodEnter()
    {
        var frame = new StackFrame(1);
        var method = frame.GetMethod();
        Trace.TraceInformation("{0}.{1}.{2}()", method.DeclaringType.Namespace, method.DeclaringType.Name, method.Name);
        Trace.Indent();
    }

    public static void LogMethodExit()
    {
        Trace.Unindent();
    }
}
Run Code Online (Sandbox Code Playgroud)

...意思是开口大括号的线条.我在其他项目中遇到了同样的问题(但不涉及winforms设计器),我认为这是一个与线程相关的问题,但我没有代码来复制它.

为什么会发生这种情况,为什么异常堆栈跟踪指向带有花括号的行?

澄清:空引用异常仅发生在winforms设计器中.运行应用程序时,它不会抛出该错误.

c# static nullreferenceexception visual-studio winforms

6
推荐指数
1
解决办法
2655
查看次数

在不可能的情况下获取NullReferenceException(检查null时)

我在我的一个方法的开头有一个非常简单的检查,如下所示:

public void MyMethod(MyClass thing)
{
    if(thing == null)
        throw new ArgumentNullException("thing");

    //Do other stufff....
}
Run Code Online (Sandbox Code Playgroud)

但我得到的堆栈跟踪(来自生产环境中的Elmah)似乎表明"if(thing == null)"行正在抛出NullReferenceException.堆栈跟踪的前两行是这样的:

System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at MyLibrary.BL.AnotherClass.MyMethod(MyClass thing) in C:\Development\MyProject\trunk\MyLibrary.BL\AnotherClass.cs:line 100
Run Code Online (Sandbox Code Playgroud)

MyClass是一个相当简单的类,没有运算符重载或类似的东西,所以我有点难以理解抛出NullReferenceException的内容!

任何人都可以提出可能导致此问题的情景吗?

编辑:我怀疑"事物"可能是null,但我真的希望ArgumentNullException不是NullReferenceException - 这基本上是这个问题的关键.可能是框架或Elmah正在改变或错误报告异常的某些东西 - 或者是二进制文件以某种方式过时的唯一解释?

c# nullreferenceexception

6
推荐指数
1
解决办法
2800
查看次数

NullReferenceException,而涉及的对象有效

NullReferenceException被抛出在所有相关对象都有效的行上.StackTrace显示#行是432.

代码是

在此输入图像描述

在这里,Flags并且tempFlags都是数据表.两个数据表的列的数据类型都是原始的(十进制,日期时间,短).该应用程序是一个多线程应用程序,代码片段属于线程函数.Flags在实例级别被decalred,即tempFlags在线程函数内声明时共享给所有线程.

这个特定的时间实例Flags包含1946个记录并tempFlags包含1.那么,为什么这个NullReferenceException?

编辑#1

ex.InnerException
null
ex.StackTrace
at System.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
at System.Data.DataTable.InsertRow(DataRow row, Int64 proposedID)
at System.Data.DataTable.MergeRow(DataRow row, DataRow targetRow, Boolean preserveChanges, Index idxSearch)
at System.Data.Merger.MergeTable(DataTable src, DataTable dst)
at System.Data.Merger.MergeTableData(DataTable src)
at System.Data.Merger.MergeTable(DataTable src)
at System.Data.DataTable.Merge(DataTable table, Boolean preserveChanges, MissingSchemaAction missingSchemaAction)
at System.Data.DataTable.Merge(DataTable table)
at [...].cs:line 432"
ex.Data
    {System.Collections.ListDictionaryInternal}
        [System.Collections.ListDictionaryInternal]: {System.Collections.ListDictionaryInternal}
        IsFixedSize: false …
Run Code Online (Sandbox Code Playgroud)

c# datatable multithreading nullreferenceexception

6
推荐指数
1
解决办法
7303
查看次数

DateTimeFormatInfo.CurrentInfo如何为null

我在C#应用程序中有以下代码.

DateTimeFormatInfo.CurrentInfo.DayNames
Run Code Online (Sandbox Code Playgroud)

ReSharper 7.1.1强调了DateTimeFormatInfo.CurrentInfo可能导致空引用异常的事实.

在什么情况下会发生这种情况?或者这只是ReSharper的一个错误,认为你访问的属性的任何对象应该被空检查?

c# resharper nullreferenceexception datetimeformatinfo resharper-7.1

6
推荐指数
1
解决办法
486
查看次数

如何在源为https uri时播放wpf MediaElement

在wpf独立应用程序(.exe)中,我在MainWindow中包含了一个MediaElement

<Window x:Class="Media.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Main Window" Height="350" Width="525">
    <Grid>
        <MediaElement x:Name="Player" Stretch="Uniform" LoadedBehavior="Manual" UnloadedBehavior="Stop"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

从后面的代码我将其设置Source为任何https Uri:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var source = new Uri("https://stream_which_can_be_opened_with_windows_media_player.com", UriKind.Absolute);
        Player.Source = source;
        Player.Play();
    }
}
Run Code Online (Sandbox Code Playgroud)

Play()方法被称为NullReferenceException被抛出,而不是播放媒体内容.MediaElement初始化,NullReferenceExceptionPlay()方法抛出,见下文.

可以在Windows Media Player(文件 - >打开URL)中打开视频的相同Uri.

问题似乎是在MediaPlayerState.OpenMedia方法(MediaElement内部使用的对象)中,该方法试图检查从中检索的appDeploymentUri SecurityHelper.ExtractUriForClickOnceDeployedApp是否具有方案HTTPS.该应用程序未部署ClickOnce(它有一个独立的安装程序),appDeploymentUri为null,因此NullReferenceException.

这是来自PresentationFramework.dll,System.Windows.Media.MediaPlayerState.OpenMedia

    if (SecurityHelper.AreStringTypesEqual(uriToOpen.Scheme, Uri.UriSchemeHttps))
    {
        // target is HTTPS. …
Run Code Online (Sandbox Code Playgroud)

c# wpf mediaelement nullreferenceexception

6
推荐指数
1
解决办法
4606
查看次数

TryGetValue - 传递未初始化的值好吗?

对于展览A,请使用以下代码:

string sql;
if (!GetQueries.TryGetValue(type.TypeHandle, out sql))
Run Code Online (Sandbox Code Playgroud)

Dictionary的文档说如果找不到Key,引用类型将被设置为null.好没关系.

如果找到密钥,变量'sql'如何填充?是否克隆了密钥的找到值?找到的项目是一种对象,然后复制了对象的内容?这样安全吗?

或者,要设置出站对象驻留的位置,是否应将呼叫设置为展示B:

var sql = string.Empty;
if (!GetQueries.TryGetValue(type.TypeHandle, out sql))
Run Code Online (Sandbox Code Playgroud)

然后初始化变量'sql'并存在对象的安全位置.

(我的问题来自于我在C编程时代对空指针的厌恶.)

c# dictionary nullreferenceexception

6
推荐指数
1
解决办法
995
查看次数

获取NullReferenceException的变量名称

堆栈跟踪NullReferenceException非常缺乏信息,它们只包含方法名称和调用堆栈.方法中的任何变量都可以为null,并且当开发机器上的bug无法重现时很难调试.

您是否知道如何获取有关该错误的更多信息,或许获取变量名称?或者你有更好的方法来调试它?

.net c# vb.net debugging nullreferenceexception

6
推荐指数
1
解决办法
2726
查看次数

Android-迭代列表时的空对象引用

我试图将在内部类中创建的列表'usrs'复制到另一个列表'team_memebers'。复制后,我尝试在FOR循环中迭代“ team_memebers”,但出现“空对象引用”错误。“用户”列表包含通过调试打印进行测试的返回对象。

public class ListNodeActivity extends AppCompatActivity
{
    private ParseObject parse_task=null;
    private List<String> team_memebers=null;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_node);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> usrs, ParseException e) {
            if (e == null) {

                team_memebers = new ArrayList<String>(usrs.size());
                for (ParseObject prso:usrs) {
                    team_memebers.add(new String(prso.getString("Username")));
                }
            } else {//handle the error
            }
        }
    });

    for (String str:team_memebers)
    {
        empolyeeSpinnerAdapter.add(str);
    }
}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪

 FATAL EXCEPTION: main
 Process: il.ac.shenkar.david.todolistex2, PID: 14490
 java.lang.RuntimeException: Unable to …
Run Code Online (Sandbox Code Playgroud)

java android nullreferenceexception

6
推荐指数
1
解决办法
2万
查看次数

c#Xunit,Assert.Throws在引发预期的异常时失败

编辑:有一个类似的问题在这里,但解决方案只建议变通方法,并没有提供分析上市公司问题或如何解决它的原因.这个问题可能仍然是重复的.

编辑2:事实证明这个问题发生在调试期间,尽管它没有发生在早期.更换后(TCheck)nullnull as TCheck测试通过跑的时候,但调试时抛出异常.

ORIGINAL POST: 我在单元测试中有一个方法,看起来像这样

internal void EqualityAssert<TCheck, TEquatable>(TEquatable item, ... ) 
    where TCheck : class, IEquatable<TEquatable>, TEquatable
{

    // Various equality assertions that are passing
    // ...

    // A == null       
    Assert.Throws<NullReferenceException>(
    () => ((IEquatable<TEquatable>)item).Equals((TCheck)null));            
}
Run Code Online (Sandbox Code Playgroud)

此方法由各种单元测试调用,并且每个测试都失败,因为遇到了"未处理的NullReferenceException",它正好在预期的位置.

Assert.Throws我之前的工作正常,但我无法弄清楚改变了什么来打破它.

c# unit-testing assert xunit.net nullreferenceexception

6
推荐指数
2
解决办法
9951
查看次数

IEnumerable 不为 null,但在迭代时抛出 NullReferenceException

我有一个 IEnumerable,我在其上运行 foreach。它在 foreach 行的某些情况下抛出空引用异常,它说

ienumerable 引发了“System.NullReferenceException”类型的异常

if (ienumerable != null)
{
    foreach (var item in ienumerable)
    {
        ......
    }
}
Run Code Online (Sandbox Code Playgroud)

我在 foreach 循环之前进行了空检查,并且 iEnumerable 通过了空检查,但是当我在其上运行 foreach 循环时,它会抛出空引用异常。

c# ienumerable foreach nullreferenceexception

6
推荐指数
2
解决办法
2982
查看次数