C# 如何修复 System.NullReferenceException:未将对象引用设置为对象的实例
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10043254/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to fix System.NullReferenceException: Object reference not set to an instance of an object
提问by iKonroi
EDIT: This issue is resolved, good thanks to Reniuz for his 5 hours of work and research of this issue, thank's everyone.
编辑:这个问题已经解决,非常感谢 Reniuz 对这个问题的 5 小时工作和研究,谢谢大家。
NullReferenceException: Object reference not set to an instance of an object. on the following code and I've searched and searched and pulled my hair out for over 7-8 hours now trying to fix it.
NullReferenceException:未将对象引用设置为对象的实例。在下面的代码中,我已经搜索并搜索并拉出我的头发超过 7-8 小时,现在试图修复它。
private void buttonAddEffect_Click_1(object sender, EventArgs e)
{
EffectSelectorForm effectSelectorForm = new EffectSelectorForm(Effects);
if (effectSelectorForm.ShowDialog(this) == DialogResult.OK)
{
// create a new instance of the selected effect as we may want multiple copies of one effect
Effect effect = (Effect)Activator.CreateInstance(effectSelectorForm.SelectedEffect.GetType());
audioGraph.AddEffect(effect);
int index = checkedListBox1.Items.Add(effect, true);
checkedListBox1.SelectedIndex = index;
}
//MessageBox.Show(String.Format("I have {0} effects", Effects.Count));
}
Error is on the line: EffectSelectorForm effectSelectorForm = new EffectSelectorForm(Effects);
错误就行了:EffectSelectorForm effectSelectorForm = new EffectSelectorForm(Effects);
the class:
班上:
namespace WindowsFormsApplication13
{
public partial class EffectSelectorForm : Form
{
public EffectSelectorForm(ICollection<Effect> effects)
{
InitializeComponent();
listBoxEffects.DisplayMember = "Name";
listBoxEffects.DataSource = effects;
}
private void buttonOK_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
public Effect SelectedEffect
{
get
{
return (Effect)listBoxEffects.SelectedItem;
}
}
private void listBoxEffects_DoubleClick(object sender, EventArgs e)
{
buttonOK_Click(sender, e);
}
What this is supposed to do is when the effectSelectorForm loads it should make a list of all the voice changer options but it does not do that.... it loads nothing on it, I got this code from another form for changing voice in Skype and re-wrote about 400 lines of code for it to work in my app but now I have this issue and I'm not giving up with all the effort I've put in so far. If it loaded on the other project why not in this one? I've went over code for hours over and over thinking im missing something but no.
这应该做的是,当 effectSelectorForm 加载时,它应该列出所有变声器选项,但它没有这样做......并重新编写了大约 400 行代码以使其在我的应用程序中工作,但现在我遇到了这个问题,而且我并没有放弃迄今为止所做的所有努力。如果它加载到另一个项目中,为什么不在这个项目中?我一遍又一遍地检查代码几个小时,认为我遗漏了一些东西,但没有。
Any help would be fantastic.
任何帮助都会很棒。
Stack
堆
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at WindowsFormsApplication13.pwn4g3.buttonAddEffect_Click_1(Object sender, EventArgs e) in F:\Users\Tom\Desktop\New folder\New folder (2)\TestApp\pwn4g3\PWN4G3\MainForm2.cs:line 1758
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Effect.cs
效果图
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JSNet
{
public abstract class Effect
{
private List<Slider> sliders;
public float SampleRate { get; set; }
public float Tempo { get; set; }
public bool Enabled { get; set; }
public Effect()
{
sliders = new List<Slider>();
Enabled = true;
Tempo = 120;
SampleRate = 44100;
}
public IList<Slider> Sliders { get { return sliders; } }
public Slider AddSlider(float defaultValue, float minimum, float maximum, float increment, string description)
{
Slider slider = new Slider(defaultValue, minimum, maximum, increment, description);
sliders.Add(slider);
return slider;
}
public abstract string Name { get; }
// helper base methods
// these are primarily to enable derived classes to use a similar
// syntax to JS effects
protected float slider1 { get { return sliders[0].Value; } }
protected float slider2 { get { return sliders[1].Value; } }
protected float slider3 { get { return sliders[2].Value; } }
protected float slider4 { get { return sliders[3].Value; } }
protected float slider5 { get { return sliders[4].Value; } }
protected float slider6 { get { return sliders[5].Value; } }
protected float slider7 { get { return sliders[6].Value; } }
protected float slider8 { get { return sliders[7].Value; } }
protected float min(float a, float b) { return Math.Min(a, b); }
protected float max(float a, float b) { return Math.Max(a, b); }
protected float abs(float a) { return Math.Abs(a); }
protected float exp(float a) { return (float)Math.Exp(a); }
protected float sqrt(float a) { return (float)Math.Sqrt(a); }
protected float sin(float a) { return (float)Math.Sin(a); }
protected float tan(float a) { return (float)Math.Tan(a); }
protected float cos(float a) { return (float)Math.Cos(a); }
protected float pow(float a, float b) { return (float)Math.Pow(a, b); }
protected float sign(float a) { return Math.Sign(a); }
protected float log(float a) { return (float)Math.Log(a); }
protected float PI { get { return (float)Math.PI; } }
protected void convolve_c(float[] buffer1, int offset1, float[] buffer2, int offset2, int count)
{
for (int i = 0; i < count * 2; i += 2)
{
float r = buffer1[offset1 + i];
float im = buffer1[offset1 + i + 1];
float cr = buffer2[offset2 + i];
float ci = buffer2[offset2 + i + 1];
buffer1[offset1 + i] = r * cr - im * ci;
buffer1[offset1 + i + 1] = r * ci + im * cr;
}
}
public virtual void Init()
{
}
public abstract void Slider();
public virtual void Block(int samplesblock)
{
}
public abstract void Sample(ref float spl0, ref float spl1);
public override string ToString()
{
return Name;
}
}
}
回答by walther
If the problem is 100% here
如果这里的问题是 100%
EffectSelectorForm effectSelectorForm = new EffectSelectorForm(Effects);
There's only one possible explanation: property/variable "Effects" is not initialized properly... Debug your code to see what you pass to your objects.
只有一种可能的解释:属性/变量“效果”未正确初始化...调试代码以查看传递给对象的内容。
EDITafter several hours
几个小时后编辑
There were some problems:
有一些问题:
MEF attribute [Import] didn't work as expected, so we replaced it for the time being with a manually populated List<>. While the collection was null, it was causing exceptions later in the code, when the method tried to get the type of the selected item and there was none.
several event handlers weren't wired up to control events
MEF 属性 [Import] 未按预期工作,因此我们暂时将其替换为手动填充的 List<>。当集合为 null 时,它会在代码后面导致异常,当该方法尝试获取所选项目的类型时,却没有。
几个事件处理程序没有连接到控制事件
Some problems are still present, but I believe OP's original problem has been fixed. Other problems are not related to this one.
仍然存在一些问题,但我相信 OP 的原始问题已得到修复。其他问题与此无关。
回答by lcryder
During debug, break on all exceptions thrown. Debug->Exceptions
在调试期间,中断所有抛出的异常。调试->异常
Check all 'Thrown' exceptions. F5, the code will stop on the offending line.
检查所有“抛出”异常。F5,代码将停在有问题的行上。
回答by Edmett
I had the same problem but it only occurred on the published website on Godaddy. It was no problem in my local host.
我遇到了同样的问题,但它只发生在 Godaddy 上发布的网站上。我的本地主机没有问题。
The error came from an aspx.cs (code behind file) where I tried to assign a value to a label. It appeared that from within the code behind, that the label Text appears to be null. So all I did with change all my Label Text properties in the ASPX file from Text="" to Text=" ".
错误来自 aspx.cs(代码隐藏文件),我试图在其中为标签分配一个值。从后面的代码看来,标签 Text 似乎为空。所以我所做的一切都是将 ASPX 文件中的所有标签文本属性从 Text="" 更改为 Text=" "。
The problem disappeared. I don't know why the error happens from the hosted version but not on my localhost and don't have time to figure out why. But it works fine now.
问题消失了。我不知道为什么错误发生在托管版本而不是我的本地主机上,也没有时间找出原因。但它现在工作正常。

