簡體   English   中英

正則表達式挑戰:修改此C#行

[英]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))

問題在於,在開發過程中,我可能不得不多次重新生成域服務,並且要處理許多表/實體。

問題:

可以使用正則表達式將上面的“舊”替換為“新”嗎? 這是一個非常可預測的模式:

  1. 查找'.EntityState'實例
  2. 替換為“ 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屬性的表達式,並將其轉換為方法調用。 如果您願意,您甚至可以將其限制為某些類,盡管在這種情況下聽起來好像沒有必要。

  1. 轉到ReSharper>查找>使用模式搜索
  2. 在“搜索模式”框中,鍵入: $obj$.EntityState
  3. 在右側列表框上方,單擊“添加占位符>表達式”。 輸入obj作為名稱。 將“表達式類型”保留為空白,或者如果您想縮小搜索范圍,請輸入POCO的類型名稱。 單擊確定。
  4. 點擊右上角的“替換”按鈕。 對於“替換模式”,鍵入: GetEntityState($obj$)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM