此代码生成Null Reference异常.异常出现在初始化参数数组的行.可能是什么问题?我不知道如何遵循堆栈跟踪并对其执行任何逻辑.提前致谢.
DAL dal = new DAL();
string SQL = @"INSERT INTO Assets ([AssetName],[AssetType],[Model],[Description],
[PurchaseValue],[SalvageValue],[Currency],[DateAcquired,[DateRetire],[ImagePath],
[InUse])
VALUES (?,?,?,?,?,?,?,?,?,?,?)";
OleDbParameter[] par = new OleDbParameter[]{
new OleDbParameter("@assetname",name.Text),
new OleDbParameter("@assettype",assettypes.SelectedValue.ToString()),
new OleDbParameter("@model",model.Text),
new OleDbParameter("@description",description.Text),
new OleDbParameter("@purchasevalue",purchaseval.Value),
new OleDbParameter("@salvagevalue",salvageval.Value),
new OleDbParameter("@currency",currencies.SelectedIndex),
new OleDbParameter("@dateacquired",purchasedate.Value),
new OleDbParameter("@dateretire",purchasedate.Value.AddYears((int)lifetime.Value)),
new OleDbParameter("@imagepath","N/A"),
new OleDbParameter("@addedby",MDIParent1.User.ID)
};
Run Code Online (Sandbox Code Playgroud) 我目前正在研究一个通过属性公开内部List的类.列表应该并且可以修改.问题是,内部列表中的条目可以从类外部设置为null.
我的代码实际上是这样的:
class ClassWithList
{
List<object> _list = new List<object>();
// get accessor, which however returns the reference to the list,
// therefore the list can be modified (this is intended)
public List<object> Data
{
get
{
return _list;
}
}
private void doSomeWorkWithTheList()
{
foreach(object obj in _list)
// do some work with the objects in the list without checking for null.
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在在doSomeWorkWithTheList()中,我总是可以检查当前列表条目是否为null,或者我可以假设使用此类的人没有将条目设置为null的好主意.
所以最后问题最终出现了:在这种情况下,谁的错误是NullReferenceException?是类开发人员没有检查null的所有错误(这通常会使代码 - 不仅在这个类中 - 更复杂)或者是这个类的用户的错误,因为将List条目设置为null doesn'真的有道理吗?除了在一些非常特殊的情况下,我倾向于通常不检查null的值.这是一种糟糕的风格或事实上的标准/标准吗?
我知道这可能没有最终答案,我只是缺少足够的经验来处理这样的事情,因此想知道其他开发人员对这些案例的看法,并希望听到关于检查null(或不是)的现实情况.
我收到错误 - NullReferenceException未处理,在以下代码中.我想从字符串pt中提取字符.但是我在for循环之外得到了正确的值,但在它内部却没有.
ArrayList list = read();
int N = Values.N;
string pt = Values.PlainText;
MessageBox.Show(""+pt.Length+" "+pt[0]);
int count = 0;
char[][][] array = new char[6][][];
for(int i=0;i<6;i++)
{
for(int j=0;j<N;j++)
{
for(int k=0;k<N;k++)
{
if (count < pt.Length)
{
array[i][j][k] = 'r';
//array[i][j][k] = pt[count];
//count++;
}
else
{
array[i][j][k] = 'x';
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 有一个结构:
public struct ReturnedCommands
{
public string key;
public string command;
};
Run Code Online (Sandbox Code Playgroud)
......和一个变量:
public static ReturnedCommands returnedCommands;
Run Code Online (Sandbox Code Playgroud)
...并且发生Null Reference Exception,返回值"3":
public bool PendingCommandsExecute_QUERY()
{
int i = 0;
try
{
i = 1;
cmdResults b = cmdResults.cmdFail;
bool retVal = false;
string command = "QUERY";
if (returnedCommands.key != command)
return false;
HashResultsAdd(command, "Started");
i = 2;
HashStatus.Clear();
string sNum = PendingCommands.SiteFetchSiteNumber;
i = 3; // <-- last one reached (debug int displayed in NRE)
string s = string.Empty;
if (returnedCommands.command …Run Code Online (Sandbox Code Playgroud) 我有这个通用方法总是返回nullReferenceException.我已经把所有不必要的代码拿出来了,它仍然给我一个例外.
public T RetrieveInformationFromApi<T>(int Id) where T : IMovie
{
T result = default(T);
result.Title = "test";
}
Run Code Online (Sandbox Code Playgroud)
可以使用三个不同的类来调用该方法,这三个类都具有属性Title,并且all都实现了接口IMovie,但该方法仍然给我一个例外.我究竟做错了什么?
我将不得不离开Find(),.FirstOrDefault()等,并用循环替换它,除非有人能解释如何处理不返回值的列表?
Public Class Form1
Public Class TestClass
Public Property item1 As String
Public Property item2 As String
End Class
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim myLst As New List(Of TestClass)
myLst.Add(New TestClass With {.item1 = "A", .item2 = "B"})
myLst.Add(New TestClass With {.item1 = "C", .item2 = "D"})
Debug.WriteLine(myLst.Find(Function(n) n.item1 = "X").item1) ' nullreferenceexception, what?
End Sub
End Class
Run Code Online (Sandbox Code Playgroud) 在我的库中,我经常公开将字符串作为参数的方法.我应该总是检查字符串参数是否等于null?或者可以忽略null导致价值的可能性NullreferenceException?
例:
public static void Parse(string line)
{
string[] splits = line.Split(' ');
}
Run Code Online (Sandbox Code Playgroud)
在这种方法中,line可能null会导致Parse抛出一个NullreferenceException.(具体地讲,因为尝试调用的Split一个null值.)我应该检查是否line是null为了防止异常被抛出?
我想在数据库中保存checkboxlist数据.我在SQL中创建了一个名为'tblSubject'的表,并在web.config中创建了connectionstring.但是我仍然得到了erorr:
未设置为对象实例的用户代码对象引用未处理NullReferenceException .
这是c#中的代码:
private void PopulateSubjects()
{
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = ConfigurationManager
.ConnectionStrings["constr"].ConnectionString;
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "select * from subjects";
cmd.Connection = conn;
conn.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
ListItem item = new ListItem();
item.Text = sdr["Subject"].ToString();
item.Value = sdr["Id"].ToString();
item.Selected = Convert.ToBoolean(sdr["IsSelected"]);
chbox.Items.Add(item);
}
}
conn.Close();
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection())
{ …Run Code Online (Sandbox Code Playgroud) 我有这条线:
myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value;
Run Code Online (Sandbox Code Playgroud)
有时结果没有"Ada No",我得到了
你调用的对象是空的.
我编写了一个if语句来避免空引用异常:
if(result.FirstOrDefault(m => m.Name == "Ada No").Value != null)
{
myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value;
}
Run Code Online (Sandbox Code Playgroud)
但它也没有用.如何在这段代码中避免此异常?如果Ada No存在,工作,如果不工作,我怎么写?谢谢.
我在Unity 3D应用程序中工作,我有2个方法通过使用Oauth连接到服务:一个检索令牌,另一个根据令牌从服务检索JSON输出.一旦JSON准备就绪,我就改变了TextMesh上的文本.一切都在TextMesh脚本的start方法中运行.像这样的东西:
void Start()
{
string authToken = getAuthToken();
CustomerGroups data = getCustGroups(authToken);
TextMesh curText = (TextMesh)gameObject.GetComponent(typeof(TextMesh));
curText.text = data.value[0].Field1+ "-" + data.value[0].Field2;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我在Visual Studio中使用"附加到Unity"并在Unity播放器中运行GameObject时,这非常有用,但是当我在没有调试的情况下运行它时(比如运行几个步骤)我总是得到:
NullReferenceException: Object reference not set to an instance of an object
HelloWorldInteractive.getAuthToken () (at Assets/HelloWorldInteractive.cs:106)
HelloWorldInteractive.Start () (at Assets/HelloWorldInteractive.cs:15)
Run Code Online (Sandbox Code Playgroud)
实际的方法是:
public string getAuthToken()
{
string token = string.Empty;
Dictionary<string, string> content = new Dictionary<string, string>();
TokenClassName json = null;
content.Add("tenant_id", "https//...");
content.Add("grant_type", "client_credentials");
content.Add("client_id", "xxxx");
content.Add("client_secret", "xxxx");
content.Add("resource", "https://...");
UnityWebRequest www = UnityWebRequest.Post("https://login...", content); …Run Code Online (Sandbox Code Playgroud)