簡體   English   中英

如何在C#中檢查和替換空值

[英]How to check and replace null value in C#

任何人都可以指導我一種方法,用字符串消息“ NO DATA”檢查並替換strList中的空值,或者在dtList中允許它們。 因為當我在此列表中遇到空值時,它會顯示類似“在位置上沒有行...”的錯誤。

private DataTable getSomething1(String text){
    DataTable dtb = new DataTable();
    ...
    ...
    return dtb;
}

...

protected void buttonCheck_Click(object sender, ImageClickEventArgs e){
    List<DataTable> strList = new List<DataTable>(){
        getSomething(txtInput.Text),
        getSomething2(txtInput.Text),
        getSomething3(txtInput.Text),
        ...                
    };
}

我在Webform中使用了C#。 請幫助我修復此代碼或為我提供解決方法。 提前致謝。

@ tech,@ riffnl:終於我得到了您的所有想法,並且現在真的可以工作了。 Anw,感謝所有專業人士的建議。 所以,這是我的解決方案^^

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]);
}

您可以使用C#的空合並運算符 ??

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

通過使用String.IsNullOrEmpty嘗試這種方式。 我將dataTable中的單元格加倍可以為null。

        //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);
    }

由於您使用的是數據表,所以我假設您不是在談論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();
  }
}

根據要求:新樣品;

// 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]);
    }

如果錯誤是“位置上沒有行...”,那么我想該探查不是不是字符串為空,而是嘗試訪問數據表中不存在的行。

特別是在這一行:

String s = 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";          
        }      
    } 

據我所知,無需過多修改程序結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM