我想知道當您進行驗證時,最好的方法或組織代碼是什麼?組織驗證方法驗證方法的最佳方法/練習C#
嵌套如果或返回在第一個地方你的驗證失敗?
這是我做的第一方式,專注於成功的情況下,使用嵌套如果
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value!= null && value.GetType().Equals(typeof(string)))
{
var text = value.ToString();
if (Regex.IsMatch(text, "^[-+]?[0-9]{1,2}.?[0-9]{0,6}?,[-+]?[0-9]{1,3}.?[0-9]{0,6}?$"))
{
var cordinations = text.Split(',');
if (cordinations.Length == 2)
{
decimal latitude = 0;
decimal longitude = 0;
if (decimal.TryParse(cordinations[0].Replace(" ", string.Empty), out latitude) && decimal.TryParse(cordinations[1].Replace(" ", string.Empty), out longitude))
{
if ((latitude >= -90 && latitude <= 90) && (longitude >= -180 && longitude <= 180))
return ValidationResult.Success;
}
}
}
}
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
}
這是我做的第二種方式,專注於失敗的情況下
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value==null)
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
if (!value.GetType().Equals(typeof(string)))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
var text = value.ToString();
if (!Regex.IsMatch(text, "^[-+]?[0-9]{1,2}.?[0-9]{0,6}?,[-+]?[0-9]{1,3}.?[0-9]{0,6}?$"))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
var cordinations = text.Split(',');
if (cordinations.Length != 2)
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
decimal latitude = 0;
decimal longitude = 0;
if (!decimal.TryParse(cordinations[0].Replace(" ", string.Empty), out latitude) ||
!decimal.TryParse(cordinations[1].Replace(" ", string.Empty), out longitude))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName));
if (!(latitude >= -90 && latitude <= 90) || !(longitude >= -180 && longitude <= 180))
return new ValidationResult(Admin.ResourceManager.GetString(ErrorMessageResourceName)); .
return ValidationResult.Success;
}
這一天將被認爲是最佳做法。或者任何其他方式來做到這一點。我會非常感謝你的想法,可能是微軟建議的任何參考?
第二種方式更容易閱讀,然後第一種 – Fabio
首先,如果'value'爲'null',則代碼將拋出NRE - 'value is string'就足夠了。 – Dennis
當你讀第二種方式你可以認識到,每一個驗證都可以在自己的方法中提取,那麼閱讀會更容易,無需閱讀驗證的所有細節 – Fabio