[英]Regular Expression Challenge: Modify this line of C#
我正在開發將使用POCO實體數據模型的RIA域服務。 由於POCO類不像EntityObject
一樣實現EntityState
屬性,因此默認域服務模板需要進行一些EntityState
。
朱莉·勒曼(Julie Lerman)提供了解決方案:
OLD: if ((customer.EntityState == EntityState.Detached))
NEW: if ((GetEntityState(customer) != EntityState.Detached))
問題在於,在開發過程中,我可能不得不多次重新生成域服務,並且要處理許多表/實體。
問題:
可以使用正則表達式將上面的“舊”替換為“新”嗎? 這是一個非常可預測的模式:
- 查找
'.EntityState'
實例- 替換為“
GetEntityState([text between ( and .])
”
使用Visual Studio的查找和替換(與使用 的 正則表達式 ,當然):
查找內容: if \\(\\({:i}\\.EntityState == EntityState\\.Detached\\)\\)
替換為: if ((GetEntityState(\\1) == EntityState.Detached))
編輯
OP似乎更喜歡Expresso 。 在這種情況下,它將是這樣的:
正則表達式: if \\(\\((\\w+)\\.EntityState == EntityState\\.Detached\\)\\)
替換字符串: if ((GetEntityState($1) == EntityState.Detached))
(還修正了!=
錯字)
s/(\w+)\.(EntityState)/Get\2(\1)/
編輯 :您沒有要求將==
翻轉到!=
,但我不確定應該是這樣,因為這將是相反的功能
編輯2 :同樣,如果您想在一行上多次執行此操作,請在末尾添加g
如果您擁有ReSharper,則可以使用其結構化搜索和替換功能。 然后,您將獲得if
語句以外的地方-它將很聰明地找到任何引用EntityState
屬性的表達式,並將其轉換為方法調用。 如果您願意,您甚至可以將其限制為某些類,盡管在這種情況下聽起來好像沒有必要。
$obj$.EntityState
obj
作為名稱。 將“表達式類型”保留為空白,或者如果您想縮小搜索范圍,請輸入POCO的類型名稱。 單擊確定。 GetEntityState($obj$)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.