iT邦幫忙

6

【C#】小知識 #4 : 轉換關鍵字來做出繁體中文int

c#

情境:

常使用阿拉伯數字1234567890
但想要有一天在寫code時
輸入int i = 1234567890
自動幫你轉成一二三四五六七八九零

這時候可以使用[explicit,implicict] + operator 轉換關鍵字來實作功能

舉例:

void Main()
{
	int_zh_tw  obj_test = 1234567890;
	Console.WriteLine(obj_test.Value);
}

class int_zh_tw
{
	public string Value { get; set; }
	public static implicit operator int_zh_tw(int inValue)
	{
		var str_int = inValue.ToString().Replace("1","一").Replace("2","二").Replace("3","三").Replace("4","四").Replace("5","五")
			.Replace("6","六").Replace("7","七").Replace("8","八").Replace("9","九").Replace("0","零");
		return new int_zh_tw() { 
			Value = str_int 
		};
	}
}

原理:

  1. 在給值時會當作參數傳進
    static operator 類別名稱的建構式(圖1)
  2. 通過把傳進來的變數,依序以對應繁體中文取代阿拉伯數字(圖2)
  3. 並包裝返回同類別名稱的物件(圖3)

想更進一步了解,可以帶MSDN了解
Conversion Keywords (C# Reference)


2 則留言

3
marlin12
iT邦新手 5 級 ‧ 2018-04-14 21:26:27
public static implicit operator int_zh_tw(int inValue) {...}

上面這句代碼,是去定義(int_zh_tw)這個implicit operator,而static就讓這個method可以直接被乎叫(無須付屬於object)。
(int_zh_tw)這個implicit operator是用來做type casting,把在integer裏的阿拉佰數字,轉換成在string裏的中文數字。

int_zh_tw  obj_test = 1234567890;  // 隱藏了(int_zh_tw)這個implicit operator
相等於
int_zh_tw  obj_test = (int_zh_tw) 1234567890;  // 用了(int_zh_tw)這個explicit operator

上面這句代碼,是隱藏了(int_zh_tw)這個implicit operator,去乎叫int_zh_tw(int inValue)這個method,然後把它的傳回值,送到obj_test。

Console.WriteLine(obj_test);

上面這句代碼,應該是obj_test.Value。

暐翰 iT邦大師 10 級‧ 2018-04-16 13:50:35 檢舉

謝謝補充 /images/emoticon/emoticon12.gif

0
小魚
iT邦研究生 1 級 ‧ 2018-04-16 13:23:02

應該是要
Console.WriteLine(obj_test.Value);
才對

直接列印會印出類別

暐翰 iT邦大師 10 級‧ 2018-04-16 13:36:37 檢舉

謝謝,我這邊修正了
LINQPAD會直接把類別+Value顯示,讓我忽略這件事。

我要留言

立即登入留言