c#子串错误

时间:2014-04-01 11:24:32

标签: c# substring

我在视图中显示了值列表。它工作正常,但我只需要获得第一个字符。我使用Substring来实现它并且它正常工作,在另一种情况下我将它用于我的列表的其他值,但它不起作用。我收到了这个错误

  

System.NullReferenceException:未将对象引用设置为对象的实例。

Html代码:

<tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>@item.LeadName</td>
                    <td>@item.CarrierCode</td>
                    <td>@item.OrderRef.Substring(0, 5)...</td>
                    <td>@item.Carrier</td>
                    <td>@item.Ref</td>
                    <td>@item.TicketRef.Substring(0, 5)</td>
                    <td>@item.NoofNts</td>
                    <td>@item.DebtorCode</td>
                    <td>@item.InvDate.ToString("d")</td>
                </tr>
            }
        </tbody>

&#34; OrderRef&#34;工作正常,另一个(TicketRef)不能使用子串,但没有它就可以工作。

3 个答案:

答案 0 :(得分:2)

听起来像TicketRef是空的。

我喜欢使用“NullSafe”扩展名(来自here)来处理这类事情:

<td>@item.TicketRef.NullSafe(s => s.Substring(0, 5))...</td>

public static TResult NullSafe<TObj, TResult>(
    this TObj obj, 
    Func<TObj, TResult> func, 
    TResult ifNullReturn = default(TResult))
{
    return obj != null ? func(obj) : ifNullReturn;
}

答案 1 :(得分:0)

直到您的注释,只有当您使用Substring时才会出现错误,这意味着OrderRef为空,尝试通过尝试捕获代码来捕获NullReferenceException以查看确切的错误。

答案 2 :(得分:0)

在这种情况下,某些属性值为null。所以你需要在调用substring之前检查一下。如果调整了样本,以便在将OrderRef属性写入输出之前进行检查。您可以相应地调整Substring在代码中不起作用的位置。

<tbody>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.LeadName</td>
            <td>@item.CarrierCode</td>
            <td>
                @if(item.OrderRef != null)
                {
                    @item.OrderRef.Substring(0, 5)
                    @Html.Raw("...");
                }
            </td>
            <td>@item.Carrier</td>
            <td>@item.Ref</td>
            <td>@item.TicketRef</td>
            <td>@item.NoofNts</td>
            <td>@item.DebtorCode</td>
            <td>@item.InvDate.ToString("d")</td>
        </tr>
    }
</tbody>

作为一般方法,请在NullReferenceExceptions上阅读这篇优秀的post以及如何修复它们。