在启动 class 的两个成员后启动 class 参数
initiate class parameters after initiating two members of class
首先,如果这是一个愚蠢的问题,我深表歉意。我是 .net 的新手。
我有一部手机 class 是这样的:
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;
}
}
}
如果 Number
和 Region
都可用,我想启动 internationalNumber
。请看看我的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
属性 setter 像这样:
public string Region
{
set { region = value.ToUpper(); ConvertNumber(); }
get { return region; }
}
public string Number
{
set { number = value; ConvertNumber(); }
get { return number; }
}
有效。但它可能会导致意外错误(如果看看我的 DoesNumberContentValid()
方法,你就会意识到。提示:我必须使用 number
而不是 Number
)
现在我想知道有更好的方法吗? (显然我不能使用 class 承包商,因为我不能同时启动两个参数。)
谢谢。
也许这对你有用:
public string InternationalNumber
{
set { internationalNumber = value; }
get { return internationalNumber ?? CalcInternationalNumber(); }
}
和函数 CalcInternationalNumber:
public string CalcInternationalNumber()
{
var sw = Stopwatch.StartNew();
try
{
if (Number == null || Region == null || DoesNumberContentValid() == false || NumberContentIsValid == false)
return null;
var phoneUtil = PhoneNumberUtil.GetInstance();
var phone = phoneUtil.Parse(Number, Region);
var intNum = phoneUtil.Format(phone, PhoneNumberFormat.INTERNATIONAL);
Log.GetLogger().Info(Format.CreateLogMessage("converting mobile number completed successfully.", sw.Elapsed.TotalMilliseconds));
return intNum;
}
catch (Exception ex)
{
Log.GetLogger().Error(Format.CreateLogMessage(ex.ToString(), sw.Elapsed.TotalMilliseconds));
return null;
}
}
希望这就是您要找的。
首先,如果这是一个愚蠢的问题,我深表歉意。我是 .net 的新手。
我有一部手机 class 是这样的:
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;
}
}
}
如果 Number
和 Region
都可用,我想启动 internationalNumber
。请看看我的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
属性 setter 像这样:
public string Region
{
set { region = value.ToUpper(); ConvertNumber(); }
get { return region; }
}
public string Number
{
set { number = value; ConvertNumber(); }
get { return number; }
}
有效。但它可能会导致意外错误(如果看看我的 DoesNumberContentValid()
方法,你就会意识到。提示:我必须使用 number
而不是 Number
)
现在我想知道有更好的方法吗? (显然我不能使用 class 承包商,因为我不能同时启动两个参数。)
谢谢。
也许这对你有用:
public string InternationalNumber
{
set { internationalNumber = value; }
get { return internationalNumber ?? CalcInternationalNumber(); }
}
和函数 CalcInternationalNumber:
public string CalcInternationalNumber()
{
var sw = Stopwatch.StartNew();
try
{
if (Number == null || Region == null || DoesNumberContentValid() == false || NumberContentIsValid == false)
return null;
var phoneUtil = PhoneNumberUtil.GetInstance();
var phone = phoneUtil.Parse(Number, Region);
var intNum = phoneUtil.Format(phone, PhoneNumberFormat.INTERNATIONAL);
Log.GetLogger().Info(Format.CreateLogMessage("converting mobile number completed successfully.", sw.Elapsed.TotalMilliseconds));
return intNum;
}
catch (Exception ex)
{
Log.GetLogger().Error(Format.CreateLogMessage(ex.ToString(), sw.Elapsed.TotalMilliseconds));
return null;
}
}
希望这就是您要找的。