有谁知道IsNullOrEmpty错误是否在3.0或更高版本中得到修复?我目前遇到2.0中的(NullReferenceException)错误,我发现文档说明应该在下一个版本中修复,但没有明确的答案.
我有:带有一些元素的XML.可以在此XML中定义的子元素,也可以不在此XML中定义.需要在子元素存在时提取子元素的值.
如何在不抛出对象引用错误的情况下获取值?
例如:
string sampleXML = "<Root><Tag1>tag1value</Tag1></Root>";
//Pass in <Tag2> and the code works:
//string sampleXML = "<Root><Tag1>tag1value</Tag1><Tag2>tag2Value</Tag2></Root>";
XDocument sampleDoc = XDocument.Parse(sampleXML);
//Below code is in another method, the 'sampleDoc' is passed in. I am hoping to change only this code
XElement sampleEl = sampleDoc.Root;
string tag1 = String.IsNullOrEmpty(sampleEl.Element("Tag1").Value) ? "" : sampleEl.Element("Tag1").Value;
//NullReferenceException:
//Object reference not set to an instance of an object.
string tag2 = String.IsNullOrEmpty(sampleEl.Element("Tag2").Value) ? "" : sampleEl.Element("Tag2").Value;
Run Code Online (Sandbox Code Playgroud) .net c# exception-handling linq-to-xml nullreferenceexception
我正在尝试修复一个我无法重现的错误(yipeee!).我有最初发现问题的用户复制的堆栈跟踪,它显示了在检查对象为null的行上抛出空引用异常(未处理)的代码.如下所示:
private void someFunction()
{
radioButton1.CheckedChanged -= checkedChangedEventHandler
radioButton2.CheckedChanged -= checkedChangedEventHandler
if (someObject != null) // throws NullReferenceException...allegedly
{
if (someObject.Property == something)
{
// set properties on some UI components
}
}
}
Run Code Online (Sandbox Code Playgroud)
什么样的条件会导致这种情况?
UPDATE
添加了一些代码.SomeCunction方法由checkedChanged事件处理程序调用.
更新2
堆栈跟踪必须是错误的,因为你们有几个人建议.没有运算符重载,并且该方法仅引用四个非UI组件的对象(标签和单选按钮),并且所有这些对象在初始化时仅分配一次,并且在获取此代码之前被多次引用,因此任何在此之前,空引用会被捕获.我将不得不更仔细地查看调用事件处理函数.
这是一个解释具有错误行号的堆栈跟踪的线程:
我一直在使用一些代码来处理通过Active目录查询来管理连接用户和设备的应用程序.
然后我得到这个错误"NullReferenceException未处理"大约一个星期,使用代码这是唯一阻止应用程序的东西.
这是我使用的背景代码:
private void backgroundWorker2_Dowork(object sender, DoWorkEventArgs e)
{
try
{
e.Result = "";
int val = 6000;
for (int a = 1; a <= val; a++)
{
counter.Text = Convert.ToString(a);
if (txtWorkGroupName.Text == "") return;
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add(new DataColumn("ComputerName", typeof(String))); //0
dt.Columns.Add(new DataColumn("IP", typeof(String))); //1
dt.Columns.Add(new DataColumn("MAC", typeof(String))); //2
dt.Columns.Add(new DataColumn("Descubierto", typeof(String))); //3
//int i = 0;
try
{
// Datos del grupo WinNT://&&&&(Nombre del grupo de trabajo)
DirectoryEntry DomainEntry = new DirectoryEntry("WinNT://" + …Run Code Online (Sandbox Code Playgroud) 这是一些简单的代码:
static void Main(string[] args)
{
var coll = new List<string> {"test", "test2", "test3"};
var filteredColl = coll.Select(x => x).ToList();
if (!filteredColl.Any())
{
DateTime? date = new DateTime();
filteredColl = coll.Where(x => date.GetValueOrDefault().Date.ToString(CultureInfo.InvariantCulture) == x).Select(x => x).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,为什么以下步骤使其与NullReferenceException崩溃:
1)断点到if

2)设置下一个执行点:

3)尝试继续使用F10:

如果我注释掉代码的最后一行,它就不会崩溃.
更新:这是堆栈跟踪:
System.NullReferenceException was unhandled HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=ConsoleApplication28 StackTrace:
at ConsoleApplication28.Program.Main(String[] args) in Program.cs: line 21
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, …Run Code Online (Sandbox Code Playgroud) 我的应用需要在后台访问共享首选项文件.自从我开始使用v21支持库的actionbaractivity来保存我的片段后,我的app力就关闭了.每当片段离开屏幕时强制关闭,但异步任务仍在运行并尝试访问该sharedpreferences文件.为什么要抛出这个错误,我该如何解决?
这是堆栈跟踪:
12-22 23:49:49.469: E/AndroidRuntime(23016): FATAL EXCEPTION: AsyncTask #4
12-22 23:49:49.469: E/AndroidRuntime(23016): Process: com.bernard.beaconportal.activities, PID: 23016
12-22 23:49:49.469: E/AndroidRuntime(23016): java.lang.RuntimeException: An error occured while executing doInBackground()
12-22 23:49:49.469: E/AndroidRuntime(23016): at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-22 23:49:49.469: E/AndroidRuntime(23016): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-22 23:49:49.469: E/AndroidRuntime(23016): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-22 23:49:49.469: E/AndroidRuntime(23016): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-22 23:49:49.469: E/AndroidRuntime(23016): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-22 23:49:49.469: E/AndroidRuntime(23016): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-22 23:49:49.469: E/AndroidRuntime(23016): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-22 23:49:49.469: E/AndroidRuntime(23016): at java.lang.Thread.run(Thread.java:818)
12-22 23:49:49.469: E/AndroidRuntime(23016): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.support.v4.app.FragmentActivity.getSharedPreferences(java.lang.String, int)' …Run Code Online (Sandbox Code Playgroud) android nullreferenceexception sharedpreferences android-support-library android-actionbaractivity
我正在为iOS创建一个Xamarin应用程序,我已经在故事板中添加了一个UITableViewCell,以赋予它我自己的风格.我确实为这个自定义UITableViewCell添加了一个类,即MainMenuCell.我向单元格添加了两个标签,并将它们与MainMenuCell.h文件连接起来,产生以下代码:
MainMenuCell.cs
using System;
using Foundation;
using UIKit;
namespace MyProjectNamespace
{
public partial class MainMenuCell : UITableViewCell
{
public MainMenuCell (IntPtr handle) : base (handle)
{
}
public MainMenuCell () : base ()
{
}
public void SetCellData()
{
projectNameLabel.Text = "Project name";
projectDateLabel.Text = "Project date";
}
}
}
Run Code Online (Sandbox Code Playgroud)
MainMenuCell.h(自动生成):
using Foundation;
using System.CodeDom.Compiler;
namespace MyProjectNamespace
{
[Register ("MainMenuCell")]
partial class MainMenuCell
{
[Outlet]
UIKit.UILabel projectDateLabel { get; set; }
[Outlet]
UIKit.UILabel projectNameLabel { get; set; }
void ReleaseDesignerOutlets …Run Code Online (Sandbox Code Playgroud) 据我所知,null条件运算符(?.)在运行下一位代码之前检查null,但在此代码中:
public delegate void EventArgs(object Sender, PlayerPage Page);
public event EventArgs PageChanged;
private PlayerPage _CurrentPage = PlayerPage.NoPage;
public PlayerPage CurrentPage
{
get { return _CurrentPage; }
set { _CurrentPage = value; PropertyChangedFire(); this?.PageChanged(this,value); }
}
Run Code Online (Sandbox Code Playgroud)
但是这个?.PageChanged(this,value); 抛出空引用异常
编辑:
哦......我多么愚蠢:)改为PageChanged?.Invoke(); 感谢您及时的回复
我有一个代码块,它从队列中读取,处理一个项目(在自己的线程中),然后重复直到队列为空.
public ActionResult GetOrdersAsync() {
int count = 0;
SyncDM sync = _common.StartSync();
while (sync != null && sync.SyncId != 0) {
int customerId;
bool result = int.TryParse(sync.Payload, out customerId);
if (result) {
Task.Run(() => GetOrders(sync.SyncId, customerId));
}
count++;
//Process the next Sync
sync = _common.StartSync();
}
return Json(new JsonModel {
Message = "Started " + count + " instances of GetOrders",
Success = count > 0
});
}
Run Code Online (Sandbox Code Playgroud)
StartSync()要么从队列中删除项目,要么在队列为空时返回null.GetOrders()处理对象.
问题是有时代码在此行引发NullReferenceException Task.Run(()=> GetOrders(sync.SyncId,customerId));
在调试器中,Sync是null(异常的原因),但customerId有一个值.这告诉我同步在前一行有一个值.这让我感到困惑,我认为它与Task.Run和线程有关,但我不明白本地范围的变量如何自发地改变它的值.
我想使用foreach获取subdata和subdata2值,但由于某种原因,我得到一个空引用异常.
XML:
<project>
<name>Name1</name>
<data>
<subdata>1</subdata>
<subdata2>1</subdata2>
</data>
<data>
<subdata>3</subdata>
<subdata2>2</subdata2>
</data>
</project>
Run Code Online (Sandbox Code Playgroud)
码:
XmlNode datanode = doc.DocumentElement.SelectSingleNode("/project/data");
XmlNode innerDataNode;
foreach (XmlNode dataVar in datanode)
{
innerDataNode = datanode.SelectSingleNode("/subdata");
int subdataVal = XmlConvert.ToInt16(innerDataNode.InnerText);
//(...)
}
Run Code Online (Sandbox Code Playgroud)
例外:
System.NullReferenceException:'对象引用未设置为对象的实例.innerDataNode为null.
我究竟做错了什么?
c# ×9
.net ×2
android ×1
clr ×1
datagridview ×1
jit ×1
linq-to-xml ×1
nullable ×1
uitableview ×1
xamarin ×1
xamarin.ios ×1
xml ×1