[英]Add strings to the list of string
我正在嘗試填充字符串列表,但它會引發null引用異常。
碼:
public class Validation
{
public List<string> Errors { get; set; }
}
將存儲所有驗證錯誤的類:
public object Post(Currency currency)
{
ClientData clientData = new ClientData();
if (ModelState.IsValid)
{
new CurrencyProvider().Insert(currency);
clientData.IsValid = true;
clientData.Data = new CurrencyProvider().GetAll();
}
else
{
Validation validation = new Validation();
foreach (var modelState in ModelState)
foreach (var error in modelState.Value.Errors)
validation.Errors.Add(error.ErrorMessage);
clientData.IsValid = false;
clientData.Data = validation;
}
return clientData;
}
當我填寫validation.Errors.Add(error.ErrorMessage)
時,會發生問題。 即使我在global.asax.cs中按如下方式全局進行了異常處理,也會拋出空引用異常
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalFilters.Filters.Add(new ExceptionFilter());
}
}
我的異常處理程序類:
public class ExceptionFilter : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
ViewResult view = new ViewResult();
view.ViewName = "Error";
view.ViewBag.Exception = filterContext.Exception.Message;
filterContext.ExceptionHandled = true;
filterContext.Result = view;
}
}
我有我的自定義錯誤處理頁面,但也未顯示,當我進行調試時,我才知道在填充字符串列表時存在null引用異常:
validation.Errors.Add(error.ErrorMessage)
填充List<string>
時,我在做什么錯?為什么拋出null引用異常? 以及為什么該空引用異常不會出現在我的自定義錯誤頁面上?
問題是您尚未在Validation類中創建List<string>
的實例。 您可以通過在類構造函數中初始化實例來實現。
public class Validation
{
public Validation()
{
this.Errors = new List<string>();
}
public List<string> Errors { get; set; }
}
您需要實例化一個新的List<string>
然后再添加帶有validation.Errors.Add()的列表。
您可以嘗試:
public object Post(Currency currency)
{
ClientData clientData = new ClientData();
validation.Errors = new List<string>(); // instantiate
if (ModelState.IsValid)
{
new CurrencyProvider().Insert(currency);
clientData.IsValid = true;
clientData.Data = new CurrencyProvider().GetAll();
}
else
{
Validation validation = new Validation();
foreach (var modelState in ModelState)
{
foreach (var error in modelState.Value.Errors)
{
validation.Errors.Add(error.ErrorMessage);
}
}
clientData.IsValid = false;
clientData.Data = validation;
}
return clientData;
}
嘗試
Validation validation = new Validation();
validation.Errors validationError = new List<string>();
然后寫入foreach循環:
validationError.Add(error.ErrorMessage);
在面向對象的編程中,您基本要做的就是稱為“組成”或“具有一個”類之間的關系,類之間的構成關系意味着內部該類“具有”另一個類。 例如:考慮下面的客戶類別
public class Customer
{
public Address HomeAddress { get; set; } //'Composition' or 'has a' Relation
public string FirstName { get; set; }
public string LastName { get; set; }
public string EMail { get; set; }
...........
}
注意:(假設Address類是另一個類,其中包含AddLine1,AddLine2,City,State等屬性)
現在,一旦初始化Customer類的對象,該類的所有屬性將使用其默認值進行初始化,下面將是上述類的對象的默認值
HomeAddress = null
FirstName = null
LastName = null
EMail = null
因此,這可能會導致運行時異常,就像您剛剛聲明'Errors'屬性但未對其進行初始化的情況一樣,為了使用它,您應該使用如下構造函數對其進行初始化:
public Customer
{
HomeAddress = new Address();
FirstName = "";
LastName = "";
EMail = "";
}
所以類似地,您可以在類構造函數中初始化'Errors'屬性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.