Files
2026-03-30 13:00:31 +02:00

52 lines
1.3 KiB
Markdown

### C# Best Practices
#### Code Style
- Follow .NET naming conventions (PascalCase for public, camelCase for private)
- Use `var` when type is obvious from right side
- Use expression-bodied members for simple methods
- Enable nullable reference types
```csharp
// GOOD: Modern C# style
public class UserService
{
private readonly IUserRepository _repository;
public UserService(IUserRepository repository)
=> _repository = repository;
public async Task<User?> GetUserAsync(string id)
=> await _repository.FindByIdAsync(id);
}
```
#### Error Handling
- Use specific exception types
- Never catch and swallow exceptions silently
- Use `try-finally` or `using` for cleanup
```csharp
// GOOD: Proper async error handling
public async Task<Result<User>> GetUserAsync(string id)
{
try
{
var user = await _repository.FindByIdAsync(id);
return user is null
? Result<User>.NotFound()
: Result<User>.Ok(user);
}
catch (DbException ex)
{
_logger.LogError(ex, "Database error fetching user {Id}", id);
throw;
}
}
```
#### Security
- Use parameterized queries (never string interpolation for SQL)
- Validate all input with data annotations or FluentValidation
- Use ASP.NET's built-in anti-forgery tokens
- Store secrets in Azure Key Vault or similar