C# 如何在C语言中检查和替换空值#

C# 如何在C语言中检查和替换空值#,c#,null,C#,Null,任何人都可以告诉我一种方法,用字符串消息“NO DATA”检查并替换strList中的空值,或者允许它们出现在dtList中。 因为当我在这个列表中遇到一个空值时,它会显示一个错误,比如“位置上没有行…” 私有数据表getSomething1(字符串文本){ DataTable dtb=新的DataTable(); ... ... 返回dtb; } ... 受保护的无效按钮\u单击(对象发送者,图像ClickEventArgs e){ 列表strList=新列表(){ getSomething(

任何人都可以告诉我一种方法,用字符串消息“NO DATA”检查并替换strList中的空值,或者允许它们出现在dtList中。 因为当我在这个列表中遇到一个空值时,它会显示一个错误,比如“位置上没有行…”

私有数据表getSomething1(字符串文本){
DataTable dtb=新的DataTable();
...
...
返回dtb;
}
...
受保护的无效按钮\u单击(对象发送者,图像ClickEventArgs e){
列表strList=新列表(){
getSomething(txtInput.Text),
getSomething2(txtInput.Text),
getSomething3(txtInput.Text),
...                
};
}
我在网络表单中使用了C#。 请帮我修复这个代码或指导我解决它的方法。 提前谢谢

@技术,@riffnl:我终于明白了你所有的想法,它现在真的起作用了。谢谢各位专家的建议。所以,这是我的解决方案^^

private String ConvertNullToEmptyString(DataTable element)
    {
        if (element.Rows.Count > 0) //just add this condition here
        {
            if (!DBNull.Value.Equals(element.Rows[0]["FullName"]))
                return (string)element.Rows[0]["FullName"] + " ";
            else
                return String.Empty;
        }
        return "NO DATA";
    }

protected void ....(){
     List<DataTable> strList = new List<DataTable>(){
       GetItem1(txtName.Text),   //private DataTable GetItem1(String t)
       GetItem2(txtName.Text),   //...           
     };

    txtGrD_D.Text = ConvertNullToEmptyString(strList[0]);
    txtGrM_D.Text = ConvertNullToEmptyString(strList[1]);
}
私有字符串ConvertNullToEmptyString(DataTable元素)
{
如果(element.Rows.Count>0)//只需在此处添加此条件
{
如果(!DBNull.Value.Equals(element.Rows[0][“FullName”]))
返回(字符串)元素。行[0][“全名”]+“”;
其他的
返回字符串。空;
}
返回“无数据”;
}
受保护的空…(){
列表strList=新列表(){
GetItem1(txtName.Text),//私有数据表GetItem1(字符串t)
GetItem2(txtName.Text),//。。。
};
txtGrD_D.Text=ConvertNullToEmptyString(strList[0]);
txtGrM_D.Text=ConvertNullToEmptyString(strList[1]);
}
您可以使用C的

string s = null;
s = s ?? "NO DATA";
// s now equals "NO DATA";

通过使用String.IsNullOrEmpty来尝试这种方法。 我认为dataTable中的单元格可以为空

        //creating an example table with one row (no data inisde):
        DataTable table = new DataTable();
        table.Columns.Add("FullName", typeof(string));
        table.Rows.Add("");
        string str = ConvertNullToEmptyString(table);

    //method to check for string:
    private String ConvertNullToEmptyString(DataTable element)
    {
        String s = element.Rows[0]["FullName"].ToString();
        return (string.IsNullOrEmpty(s) ? "NO DATA" : s);
    }

因为您使用的是datatable,所以我假设您所说的不是NULL(或nill),而是DBNull。。 将函数ConvertNullToEmptyString更改如下:

private String ConvertNullToEmptyString(DataTable element){ 
  if (element.Rows[0]["Fullname"] == DBNull.Value || element.Rows[0]["Fullname"] == null) {
    return "NO DATA";
  } else {
    return element.Rows[0]["Fullname"].ToString();
  }
}
if (element.Rows.Count >0)
按要求:新样品

// a list of datatables each containing 1 row, wasn't that the point of datatables
    // anyway -- I think you don't have any rows, so let's try this:
    private String ConvertNullToEmptyString(DataTable element)
    {
        if (element.Rows.Count == 0)
        {
            return "NO DATA";
        }
        if (element.Rows[0]["Fullname"] == DBNull.Value || element.Rows[0]["Fullname"] == null)
        {
            return "NO DATA";
        }
        else
        {
            return element.Rows[0]["Fullname"].ToString();
        }
    } 
    protected void Test()
    {
        List<DataTable> strList = new List<DataTable>(){ 
           GetItem("test1"),   //private DataTable GetItem1(String t) 
           GetItem("test2")   //...            
         };
        txtGrD_D.Text = ConvertNullToEmptyString(strList[0]);
    }
//一个数据表列表,每个表包含一行,这不是数据表的要点吗
//不管怎样--我想您没有任何行,所以让我们试试这个:
私有字符串ConvertNullToEmptyString(DataTable元素)
{
if(element.Rows.Count==0)
{
返回“无数据”;
}
if(element.Rows[0][“Fullname”]==DBNull.Value | | element.Rows[0][“Fullname”]==null)
{
返回“无数据”;
}
其他的
{
返回元素。行[0][“Fullname”].ToString();
}
} 
保护空隙试验()
{
List strList=new List(){
GetItem(“test1”),//私有数据表GetItem1(字符串t)
GetItem(“test2”)/。。。
};
txtGrD_D.Text=ConvertNullToEmptyString(strList[0]);
}
如果错误是“位置没有行…”,那么我猜问题不是字符串为null,而是您试图访问datatable中不存在的行

特别是在以下方面:

String s = element.Rows[0]["FullName"].ToString();
您尝试访问datatable的第一行。 如果数据表是空的怎么办?你犯了个错误! 因此,您应该检查datatable是否包含具有以下内容的行:

private String ConvertNullToEmptyString(DataTable element){ 
  if (element.Rows[0]["Fullname"] == DBNull.Value || element.Rows[0]["Fullname"] == null) {
    return "NO DATA";
  } else {
    return element.Rows[0]["Fullname"].ToString();
  }
}
if (element.Rows.Count >0)

答复你的评论: 是的,我们可以。 修改您的:

foreach (DataTable element in strList)
变成类似于:

foreach (DataTable element in strList)     
    {          
    if (element.Rows.Count>0)
        {
        if(strList.Any(item => item == null))          
            {                
          ConvertNullToEmptyStringelement);                                                 
            }
        txtItem1.Text = mytext ;          
        .....
        }
    else
        {
        txtItem1.Text = "No Data";          
        }      
    } 

如果第0行为null,则无法将其解析为字符串,因此请在此处检查null或检查row count确实不能为null,可以为DBNull,尽管如此。数据表中不存在此行。它是空的,所以我想让它们成为字符串消息=“无数据”,我不知道怎么做。我们能做到吗,专家?是的:看看答案,我已经用一个可能的解决方案编辑了它。你能指出我的错误吗。我已经像你说的那样在上面编辑了我的帖子,错误可能在以下行:
txtGrM_D.Text=strList[1]。行[0][“全名”]。ToString()
这里您引用的是一个数据表(strList[1]),其中您没有检查是否至少有一个row.uk。我得到了它。我已经找到了一种方法,在更换之前先检查一下。谢谢,如果这是正确答案,请在答案前打绿色勾,将其标记为正确-这将提高您的接受率。我理解您的解决方案。这听起来合乎逻辑。我稍微改变一下以适应我的情况。但是我不知道为什么它仍然是。。。“位置0处没有行。”。你能指出我的错误吗。我已经像你的想法一样在上面编辑了我的帖子。我明白你的想法,用我的方式去做。你的想法在很大程度上帮助我找到了解决办法。感谢proI我不确定,但请尝试使用:if(element.Rows.Any())代替:if(element.Rows.Count==0)