按照第一篇的步骤。实现validator。争取让所有的CASE都过。
public class Validator
{
public string ErrorMsg { get; private set; }
public bool Validate(string input)
{
if (string.IsNullOrEmpty(input))
{
ErrorMsg = "the input can't be empty.";
return false;
}
if (input.Length != 4)
{
ErrorMsg = "the input must be four digits.";
return false;
}
var regex = new Regex(@"^[0-9]*$");
if (!regex.IsMatch(input))
{
ErrorMsg = "the input must be fully digital.";
return false;
}
if (input.Distinct().Count() != 4)
{
ErrorMsg = "the input figures can't contain duplicate.";
return false;
}
return true;
}
}
Run...

  一个CASE对应这一个IF。也可合并2个CASE。可以用"^d{4}$"去Cover"4位数字"。可以根据自己的情况去定。
  小步前进不一定要用很小粒度去一步一步走。这样开发起来的速度可能很慢。依靠你自身的情况去决定这一小步到底应该有多大。正所谓"步子大了容易扯到蛋,步子小了前进太慢"。只要找到合适自己的步子。才会走的更好。
  这么多IF看起来很蛋疼。有测试。可以放心大胆的重构。把每个IF抽出一个方法。看起来要清晰一些。
public class Validator
{
public string ErrorMsg { get; private set; }
public bool Validate(string input)
{
return IsEmpty(input) && IsFourdigits(input) && IsDigital(input) && IsRepeat(input);
}
private bool IsEmpty(string input)
{
if (!string.IsNullOrEmpty(input))
{
return true;
}
ErrorMsg = "the input can't be empty.";
return false;
}
private bool IsFourdigits(string input)
{
if (input.Length == 4)
{
return true;
}
ErrorMsg = "the input must be four digits.";
return false;
}
private bool IsDigital(string input)
{
var regex = new Regex(@"^[0-9]*$");
if (regex.IsMatch(input))
{
return true;
}
ErrorMsg = "the input must be fully digital.";
return false;
}
private bool IsRepeat(string input)
{
if (input.Distinct().Count() == 4)
{
return true;
}
ErrorMsg = "the input figures can't contain duplicate.";
return false;
}
}