demoshop

demo, trying to be the best_

之前上過 Bill 的C#新語法大作戰就一直覺得可以用 Index 加上 Range 搞點事,最近剛好遇到要做字串遮罩的需求,就想來練練手,沒想到殺雞用了牛刀啊。

一個看起來就像程式工程師的人在吃糖果,並且看的出來他有蛀牙,漫畫畫風

需求說明

個資常見的需求,要把客戶的電話號碼作遮罩,只留下最後四碼,其餘使用符號*替代,遮罩完的字串長度需要和原本的相同。

使用新方法

public static string ToMasked(this string rowString, int plainCodeCount)
{
	if (string.IsNullOrEmpty(rowString))
	{
		return string.Empty;
	}

	if (rowString.Length < plainCodeCount)
	{
		return rowString;
	}
	var charArray = rowString.ToCharArray();
	
	var lastString = string.Join("", charArray[^plainCodeCount..]);
	
	return new string('*', charArray.Length - 4) + lastString;
}
為了要使用 range 所以我將字串拆成字元陣列再組回來,這段是我認為會影響效能的部分,所以寫完以後我又寫了一個傳統寫法

使用傳統方法

public static string MaskString(this string s, int plainCodeCount)
{
	if (string.IsNullOrEmpty(s))
	{
		return string.Empty;
	}

	if (s.Length < plainCodeCount)
	{
		return s;
	}
	
	string lastStr = s.Substring(s.Length - plainCodeCount);
	
	string masked = new string('*', s.Length - plainCodeCount) + lastStr;

	return masked;
}

效能測試的部分我使用知名的套件 Benchmark 處理,以下就是結果

Benchmark   實測結果

Index 加上 Range  的強項在這單純的需求看不出來,硬用反而讓效能變差,建議看看下方的參考連結後挑選適合的場景使用,千萬不要為了炫技亂來啊…

回應討論