的两个成员之后启动类参数,起初我很抱歉,如果它是一个愚蠢的问题。我是.net新手。在启动类别
我有一个移动类是这样的:
public class Mobile
{
private string region;
private string number;
private bool regionIsValid;
private bool numberContentIsValid;
private string internationalNumber;
public string Region
{
set { region = value.ToUpper(); ConvertNumber(); }
get { return region; }
}
public string Number
{
set { number = value; ConvertNumber(); }
get { return number; }
}
public Interface Reason
{
set { reason = value; }
get { return reason; }
}
public bool NumberContentIsValid
{
set { numberContentIsValid = value; }
get { return numberContentIsValid; }
}
public string InternationalNumber
{
set { internationalNumber = value; }
get { return internationalNumber; }
}
public void ConvertNumber()
{
var sw = Stopwatch.StartNew();
try
{
if (Number == null || Region == null || DoesNumberContentValid() == false || NumberContentIsValid == false)
return;
var phoneUtil = PhoneNumberUtil.GetInstance();
var phone = phoneUtil.Parse(Number, Region);
InternationalNumber = phoneUtil.Format(phone, PhoneNumberFormat.INTERNATIONAL);
Log.GetLogger().Info(Format.CreateLogMessage("converting mobile number completed successfully.", sw.Elapsed.TotalMilliseconds));
return;
}
catch (Exception ex)
{
Log.GetLogger().Error(Format.CreateLogMessage(ex.ToString(), sw.Elapsed.TotalMilliseconds));
return;
}
}
public bool DoesNumberContentValid()
{
var sw = Stopwatch.StartNew();
var len = new Regex(@"^.{2,20}$"); //length at least 6 characters and maximum of 20
var digit = new Regex(@"^[0-9]*$"); //a string consisting only of numbers
if (number.StartsWith(@"+") == true) number = number.Substring(1);
number = number.Replace(" ", string.Empty);
try
{
if (!len.IsMatch(Number))
{
NumberContentIsValid = false;
Reason = new Interface("G00005");
}
else if (!digit.IsMatch(Number))
{
NumberContentIsValid = false;
Reason = new Interface("G00005");
}
else if (Region != "IR")
{
NumberContentIsValid = false;
Reason = new Interface("G00005");
}
else
{
var phoneUtil = PhoneNumberUtil.GetInstance();
var mobile = phoneUtil.Parse(Number, Region);
if (phoneUtil.IsValidNumber(mobile) != true)
{
NumberContentIsValid = false;
Reason = new Interface("G00005");
}
else if (phoneUtil.GetNumberType(mobile).ToString() != "MOBILE")
{
NumberContentIsValid = false;
Reason = new Interface("G00005");
}
else
NumberContentIsValid = true;
}
Log.GetLogger().Info(Format.CreateLogMessage("mobile content validation completed successfully.", sw.Elapsed.TotalMilliseconds));
return true;
}
catch (Exception ex)
{
Reason = new Interface("G00001", ex.Message);
Log.GetLogger().Error(Format.CreateLogMessage(ex.ToString(), sw.Elapsed.TotalMilliseconds));
return false;
}
}
}
我想发起internationalNumber
如果Number
和Region
都是可用的。请大家看看我的convertnumber()
方法:
public void ConvertNumber()
{
var sw = Stopwatch.StartNew();
try
{
if (Number == null || Region == null || DoesNumberContentValid() == false || NumberContentIsValid == false)
return;
var phoneUtil = PhoneNumberUtil.GetInstance();
var phone = phoneUtil.Parse(Number, Region);
InternationalNumber = phoneUtil.Format(phone, PhoneNumberFormat.INTERNATIONAL);
Log.GetLogger().Info(Format.CreateLogMessage("converting mobile number completed successfully.", sw.Elapsed.TotalMilliseconds));
return;
}
catch (Exception ex)
{
Log.GetLogger().Error(Format.CreateLogMessage(ex.ToString(), sw.Elapsed.TotalMilliseconds));
return;
}
}
为了做到这一点我使用Number
和Region
的属性设置是这样的:
public string Region
{
set { region = value.ToUpper(); ConvertNumber(); }
get { return region; }
}
public string Number
{
set { number = value; ConvertNumber(); }
get { return number; }
}
它的工作原理。但它可能会导致意外的错误(你意识到如果看看我的DoesNumberContentValid()
方法。tips:我必须用number
而不是Number
) 现在我想知道有没有更好的方法来做到这一点? (忘记我不能使用班级承包商,因为我不能同时启动两个参数。)
谢谢。
国际号码属性总是与其他两个属性相关吗?您确定要允许用户分别设置国际号码属性吗? –
谢谢亲爱的@ Maor Veitsman。是的,国际号码总是与其他两个属性有关,我想单独分析国际号码属性。 – David
可以肯定的是,InternationalNumber属性应该有一个私人设置者,对吧? –