# Maguyva 對 C# 的支援：讓 .NET 程式碼庫的重構更安全

Canonical source: https://maguyva.ai/zh-hant/languages/csharp

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva 透過 AST 剖析與符號擷取支援 C#，讓 AI 代理得以橫跨 .NET 服務、大量使用 LINQ 的商業邏輯、共用函式庫，以及長期運作的企業儲存庫進行作業。

## 支援概況

- 等級: AST 與符號支援
- 程式語言
- 副檔名: .cs, .csx
- 真正的 AST 剖析，支援語法感知搜尋與結構化情境。
- 具名符號支援語意查詢與交叉參照。啟用關係擷取後，即可使用圖譜導覽。
- 這個語言會為圖譜感知搜尋提供符號與關係；支援的邊類型會隨其原生構造而異。
- 同時支援 AST 剖析與符號擷取。

## 最適合的情境

- 混合了 Web 端點、工作排程與共用函式庫的 ASP.NET、worker-service 及內部平台儲存庫。
- 維護成熟 .NET 系統資產的團隊，其中 LINQ、非同步流程與框架抽象層，掩蓋了真正的執行路徑。
- 在讓代理重寫商業邏輯之前，先測試它能否在分層的 .NET 程式碼中以實際程式碼為依據的團隊。

## 代理工作流程

- 在編輯商業邏輯之前，先追蹤 controller、service 與 repository 的路徑。
- 檢視某個 model、DTO 或共用工具，在整個儲存庫中於何處被實例化。
- 在讓代理重寫任何內容之前，先理解周邊的 LINQ 或非同步模式。

## 成熟 .NET 程式碼庫中真正重要的事

許多使用 AI 工具的團隊，身處的是 .NET，而不是全新的 JavaScript 專案。他們擁有 API、工作處理程序、共用模型、內部函式庫，以及累積多年的商業邏輯。問題並不在於 LLM 能不能寫出 C# 語法，而在於它能不能在一個「一次錯誤編輯就可能波及服務、模型與共用抽象層」的儲存庫中，以實際程式碼為依據。

這正是為什麼一個 C# 頁面，必須比單純一句「支援」說得更具體。

## Maguyva 在 C# 中實際擷取了什麼

Maguyva 會正規化 `using` 引入項目，從定義中去除像 `?` 與 `[]` 這樣的可為 null 與陣列後綴，並在去除泛型參數的角括號的同時，將類似建構函式的呼叫節點視為實例化。這些細節在充滿類別的 C# 儲存庫中相當有用，因為它們能讓圖譜在真實領域型別周圍變得更乾淨。

這份設定同時也過濾掉大量的 BCL 與 LINQ 雜訊，這一點比聽起來更重要。在成熟的 .NET 程式碼庫中，一張被框架呼叫主導的圖譜，用處其實不大；真正有用的圖譜，是那種讓儲存庫專屬的 controller、service、DTO 與輔助類別依然清晰可見的圖譜。

## 對 .NET 程式碼庫有用的 MCP 工作流程

實際的作業流程，通常從以下方式展開：

- 當你已知 controller、service、DTO 或 model 名稱時，使用 `find_symbol`。
- 在編輯一個可能被許多呼叫端使用的共用 service 或型別之前，使用 `dependency_search`。
- 對於像「追蹤這個請求從 controller 到 repository 的路徑」這類、路徑橫跨多個層級的提示，使用 `get_task_context`。

## 這個頁面適合什麼情境

這個頁面適合那些希望在真實的 .NET 程式碼庫中獲得 AI 協助、而不只是在玩具專案中試用的團隊。如果周邊系統偏向 JVM 而非 .NET，可以與 [Java](/zh-hant/languages/java) 相互比較。如果你的 C# 層只是更大型多語言系統中的一部分，相鄰的 [TypeScript](/zh-hant/languages/typescript) 頁面通常也值得參考。

## 引擎細節

- 引入項目中的 `using` 前綴會被正規化，而像 `?` 與 `[]` 這類可為 null 或陣列的後綴，則會從符號定義中被移除。
- 實例化擷取會使用呼叫節點，並移除泛型參數的角括號，這有助於讓類似建構子的用法，在圖譜中保持可讀性。
- 此設定會明確過濾大量的 BCL 與 LINQ 雜訊，讓儲存庫專屬的服務與模型更容易被凸顯出來。

## 實用的 MCP 進入點

- `find_symbol`: 當你知道即將要動的 controller、服務、DTO 或共用型別名稱時使用。
- `dependency_search`: 在編輯整個應用程式共用的核心服務或模型之前，使用傳入走訪。
- `get_task_context`: 在分層的 .NET 程式碼庫中，很適合用於像「追蹤這個請求從 controller 到 repository 的流程」這類提示。
