各位好!我已用Dictionary<string,string>获取了数据,现在想将name对应的value赋给一个对象数组中,请问用C#如何写语句?
我写的代码如下:
public AlarmNotificationLoginInfo[] mappingByNotificationLoginInfo(Dictionary<string, string> dic)
{
AlarmNotificationLoginInfo[] anli = new AlarmNotificationLoginInfo[dic.Count];
int i = 0;
try
{
if (dic != null && dic.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in dic)
{ if (i < dic.Count)
{
switch (kvp.Key)
{
case "username":
anli[i].Username = kvp.Value;
break;
case "password":
anli[i].Password = kvp.Value;
break;
default:
break;
}
}
}
i++;
}
}
catch (Exception e)
{
throw e; }
return anli;
}
问题出现在标红的地方,抛出异常:未将对象引用设置到对象的实例。
我已定义了数组的大小,为什么这里赋值就出错了呢?恳请各位高手指点一下!
我写的代码如下:
public AlarmNotificationLoginInfo[] mappingByNotificationLoginInfo(Dictionary<string, string> dic)
{
AlarmNotificationLoginInfo[] anli = new AlarmNotificationLoginInfo[dic.Count];
int i = 0;
try
{
if (dic != null && dic.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in dic)
{ if (i < dic.Count)
{
switch (kvp.Key)
{
case "username":
anli[i].Username = kvp.Value;
break;
case "password":
anli[i].Password = kvp.Value;
break;
default:
break;
}
}
}
i++;
}
}
catch (Exception e)
{
throw e; }
return anli;
}
问题出现在标红的地方,抛出异常:未将对象引用设置到对象的实例。
我已定义了数组的大小,为什么这里赋值就出错了呢?恳请各位高手指点一下!
改为:
anli[i].Username = kvp.Value==null?"":kvp.Value;
anli[0]是null的,应该先new AlarmNotificationLoginInfo()
还有
i++;应该放在foreach内。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;/// <summary>
/// AlarmNotificationLoginInfo 的摘要说明
/// </summary>
public class AlarmNotificationLoginInfo
{
public AlarmNotificationLoginInfo()
{
//
// TODO: 在此处添加构造函数逻辑
//
} private string username;
private string password; /// <summary>
/// 用户名
/// </summary>
public string Username
{
get { return username; }
set { username = value; }
} /// <summary>
/// 密码
/// </summary>
public string Password
{
get { return password; }
set { password = value; }
}
}
lyb018提示说“AlarmNotificationLoginInfo[] anli = new AlarmNotificationLoginInfo[dic.Count]
anli[0]是null的,应该先new AlarmNotificationLoginInfo()”,那是不是要先对对象数组进行初始化?
我又加上了下面这段代码:
AlarmNotificationLoginInfo[] anli = new AlarmNotificationLoginInfo[dic.Count];
int i = 0;
for (i = 0; i < anli.Length; i++)
{
anli[i].Username = "";
anli[i].Password = "";
}
但是调试仍然抛出异常:使用new关键字创建对象实例,是不是要
AlarmNotificationLoginInfo a = new AlarmNotificationLoginInfo();
然后再对对象a进行初始化呀?恳请各位解答。
我已经创建了对象实例,为什么还会报空指向的异常呢?
这里你要新建一个对象:
AlarmNotificationLoginInfo anliTest = new AlarmNotificationLoginInfo();
anliTest.Username = "放入你想要的值";
anliTest.Password = "放入你想要的值";
然后加到数组中.AlarmNotificationLoginInfo[]这个是一个AlarmNotificationLoginInfo这种类型的数组,所以要先实例化一个这种类型,然后加进去.
switch (kvp.Key)
{
case "username":
anliTest.Username = kvp.Value;
break;
case "password":
anliTest.Password = kvp.Value;
break;
default:
break;
}
anli[i] = anliTest;
现在我的代码按网友lyb018的提示修改如下:
if (dic != null && dic.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in dic)//取内容
{
switch (kvp.Key)
{
case "username":
al.Username = (kvp.Value == null ? "" : kvp.Value);
break;
case "password":
al.Password = (kvp.Value == null ? "" : kvp.Value);
break;
default:
break;
}
}
//获取记录条数
for (int i = 0; i < dic.Count; i++)
{
anli[i] = al;
}
}
现在能将对象放在对象数组中了。调试是取到的记录只有一条,但是dic.Count=2(我知道i<dic.Count肯定是不对的),但我现在怎么获得蓝色部分记录的条数,也就是下面标红的循环,怎么获取i<对象个数,这个对象个数怎么获得?恳请高手解答。
public AlarmNotificationLoginInfo[] mappingByNotificationLoginInfo(Dictionary<string, string> dic)
{
AlarmNotificationLoginInfo[] anli = new AlarmNotificationLoginInfo[dic.Count]; int i = 0;
try
{
if (dic != null && dic.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in dic)
{
if (i < dic.Count)
{
anli[i] = new AlarmNotificationLoginInfo();
switch (kvp.Key)
{
case "username":
anli[i].Username = kvp.Value;
break;
case "password":
anli[i].Password = kvp.Value;
break;
default:
break;
}
}
i++;
}
}
}
catch (Exception e)
{
throw e; }
return anli;
}
搞定
{ if (i < dic.Count)
{
switch (kvp.Key)
{
case "username":
anli[i].Username = kvp.Value;
break;
case "password":
anli[i].Password = kvp.Value;
break;
default:
break;
}
}
}
i++;
请看下i++的位置,有问题!