iT邦幫忙

9

【C#】小知識 #2 : 字串處理

c#
暐翰 2018-04-12 11:07:0111607 瀏覽

【C#】小知識 #2 : 字串處理

之前回答問題時
發現C#使用者可能不知道一些
關於字串開發上有用的小知識

所以有了這篇文章 :)

多行字串

使用方式使用@標明在字串前
舉例:

var str_total = @"
		你好
		IT邦幫忙
	";

系統幫你編譯的時候會自動加上\r\n\t

這時候可以避免一些問題,
像是SQL相接字串少加空白,造成SQL Error


字串相接

使用$標明在字串前

var name = "暐翰";
var str_say = "你好,IT邦幫忙";
var str_total = $"{name} 說 : {str_say}";

系統幫你編譯的時候會自動加上string.format()


多行字串相接

使用$@標明在字串前

var name = "暐翰";
var str_say = "IT邦幫忙";
var str_total = $@"
		{name} 說:
		你好
		{str_say}
	";

注意要$在前@在後(不然會出現錯誤)


補充:

因為string.format底層還是使用stringbuilder來串接字串
所以遇到多執行緒共用同一個字串時,還是要特別處理喔


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
小魚
iT邦大師 1 級 ‧ 2018-04-12 12:05:13

因為string.format底層還是使用stringbuilder來串接字串
所以遇到多執行緒共用同一個字串時,還是要特別處理喔

這句話不太懂,
能舉個實例嗎?
什麼時候會出問題?

暐翰 iT邦大師 1 級 ‧ 2018-04-12 12:31:51 檢舉

我回答在下方留言

1
暐翰
iT邦大師 1 級 ‧ 2018-04-12 12:31:23

這句話不太懂,
能舉個實例嗎?
什麼時候會出問題?

舉例
現在做一個線上可多人同時修改的markdown筆記本
server端資料筆記的文本資料共用一個stringbuiler保存起來

初始筆記資料:

你好嗎 IT幫

這時候有多個使用者分別在同時修改筆記並送出到server
因為server是多執行續環境
可能A使用者修改

你好嗎 IT幫
不好

B使用者修改

你好嗎 IT幫
好

假如因為stringbuiler底層沒有做lock處理
所以是誰修改成功不知道。


正確做法應該要
A、B使用者送出請求時
要去lock筆記資料的stringbuiler
看哪個reqeust先到先修改
後到的修改請求,server就要不接受,並返回訊息給前端說
"此次修改失敗,因為有其他使用者先修改"

小魚 iT邦大師 1 級 ‧ 2018-04-12 12:45:32 檢舉

所以在Server做lock的動作可以防止多個使用者同時動作的問題囉?

暐翰 iT邦大師 1 級 ‧ 2018-04-12 13:00:05 檢舉


lock物件,可以用SQL概念
對一個表格同一筆資料做update動作,也會lock資料
來理解

小魚 iT邦大師 1 級 ‧ 2018-04-13 12:37:52 檢舉

可怕的是SQL有時候一lock就沒完沒了...

1
Luke
iT邦研究生 5 級 ‧ 2018-04-13 17:48:15
發現C#使用者可能不知道一些
關於字串開發上有用的小知識

還真的不知道可以用$ /images/emoticon/emoticon04.gif, 只知道用 @"....."

您去哪挖出來的?/images/emoticon/emoticon35.gif

暐翰 iT邦大師 1 級 ‧ 2018-04-13 18:44:16 檢舉

在stackoverflow跟大神學的 /images/emoticon/emoticon12.gif

字串模板是 C# 6.0 的新功能。
/images/emoticon/emoticon39.gif

小魚 iT邦大師 1 級 ‧ 2018-05-31 11:56:54 檢舉

VS 2015後就有了,
我還蠻喜歡它的.
/images/emoticon/emoticon39.gif

我要留言

立即登入留言