Skip to content

Nextended.Core

📚 Full API reference — every public type and member, generated from the compiled assembly.

🇩🇪 Diese Seite auf Deutsch

The foundation library providing essential extension methods, custom types, and utilities for .NET development.

Overview

Nextended.Core is the base library that all other Nextended packages depend on. It provides a comprehensive set of extension methods and custom types designed to enhance productivity and code quality.

Installation

bash
dotnet add package Nextended.Core

Key Features

1. Extension Methods

Nextended.Core provides extensive extension methods for built-in .NET types:

String Extensions

  • Case conversions (ToCamel, ToPascalCase, Capitalize, Uncapitalize)
  • Validation helpers (IsNullOrEmpty, IsNullOrWhiteSpace)
  • String manipulation (Truncate, Remove, Replace patterns)
  • Encoding/Decoding utilities
csharp
using Nextended.Core.Extensions;

string text = "hello world";
string camelCase = text.ToCamel();         // "helloWorld"
string pascalCase = text.ToPascalCase();   // "HelloWorld"

DateTime Extensions

  • Date calculations (AddWeekDays, IsWeekend, IsWeekday, FirstDayOfMonth, LastDayOfMonth)
  • Date comparisons and ranges
  • Formatting helpers
  • Time zone conversions
csharp
DateTime date = DateTime.Now;
DateTime nextWeekDay = date.AddWeekDays(5);
bool isWeekend = date.IsWeekend();

Collection Extensions (Enumerable)

  • Advanced LINQ operations
  • Batch processing (Batch, Chunk)
  • Distinct operations (DistinctBy)
  • ForEach and iteration helpers
  • Safe operations (SafeAny, SafeFirstOrDefault)
csharp
var items = new[] { 1, 2, 3, 4, 5 };
var batches = items.Batch(2); // [[1,2], [3,4], [5]]

var users = GetUsers();
users.ForEach(u => Console.WriteLine(u.Name));

Type Extensions

  • Type inspection and reflection
  • Generic type operations
  • Inheritance checks
  • Attribute retrieval
csharp
Type type = typeof(MyClass);
bool hasAttribute = type.HasAttribute<SerializableAttribute>();
var properties = type.GetPublicProperties();

Object Extensions

  • Deep cloning
  • Property access and manipulation
  • Conversion utilities
  • Null-safe operations
  • Object-to-object mapping
csharp
var original = new MyClass { Name = "Test" };
var clone = original.CloneDeep();

object value = myObject.GetPropertyValue("PropertyName");

// Map between different types
var dto = entity.MapTo<EntityDto>();

See the Class Mapping Reference for comprehensive mapping documentation.

Task Extensions

  • Async/await utilities
  • Timeout operations
  • Fire-and-forget patterns
  • Cancellation helpers
csharp
await MyAsyncMethod().WithTimeout(TimeSpan.FromSeconds(30));

// Fire and forget
MyAsyncMethod().FireAndForget(ex => Logger.LogError(ex));

2. Custom Types

Money Type

Precise decimal type for financial calculations with currency support.

csharp
using Nextended.Core.Types;

var price = new Money(99.99m, Currency.USD);
var tax = price * 0.20m;
var total = price + tax;

Console.WriteLine(total); // $119.99

Date Type

Date-only type without time components (similar to DateOnly in .NET 6+).

csharp
var today = Date.Today;
var tomorrow = today.AddDays(1);
var lastWeek = today.AddDays(-7);

if (today > lastWeek)
{
    Console.WriteLine("Today is after last week");
}

BaseId Type

Generic strongly-typed ID wrapper for type-safe identifiers.

csharp
public class UserId : BaseId<int>
{
    public UserId(int value) : base(value) { }
}

public class User
{
    public UserId Id { get; set; }
    public string Name { get; set; }
}

var userId = new UserId(123);

SuperType

Advanced entity type with subtype relationships.

csharp
public class Vehicle : SuperType<VehicleType>
{
    public string Model { get; set; }
}

var car = new Vehicle { Type = VehicleType.Car, Model = "Tesla Model 3" };

Range Type

Generic range type for intervals and boundaries.

csharp
var range = new Range<int>(1, 100);
bool isInRange = range.Contains(50); // true

var dateRange = new Range<DateTime>(
    DateTime.Today, 
    DateTime.Today.AddDays(7)
);

3. Class Mapping

Fast and flexible object mapping without external dependencies.

csharp
using Nextended.Core.Extensions;

// Simple mapping
var userDto = user.MapTo<UserDto>();

// Advanced mapping with settings
var settings = ClassMappingSettings.Default
    .IgnoreProperties<User>(u => u.Password)
    .IgnoreProperties<UserDto>(dto => dto.CalculatedField);

var result = user.MapTo<UserDto>(settings);

// Map collections
var userDtos = users.MapTo<UserDto[]>();

Mapping Features

  • Automatic property matching by name
  • Type conversion
  • Nested object mapping
  • Collection mapping
  • Custom converters
  • Property ignoring
  • Bi-directional mapping

4. Validation and Checking

csharp
using Nextended.Core;

// Argument validation
Check.NotNull(parameter, nameof(parameter));
Check.NotEmpty(collection, nameof(collection));
Check.Range(value, 1, 100, nameof(value));

// Fluent validation
Check.That(age >= 18, "Must be 18 or older");

5. Serialization Helpers

csharp
using Nextended.Core.Extensions;

// JSON serialization
var json = myObject.ToJson();
var obj = json.FromJson<MyClass>();

// XML serialization
var xml = myObject.ToXml();
var obj = xml.FromXml<MyClass>();

// YAML serialization
var yaml = myObject.ToYaml();

6. Hashing and Encryption

csharp
using Nextended.Core.Hashing;
using Nextended.Core.Encryption;

// Hashing
string hash = HashHelper.ComputeSha256Hash(text);

// Encryption/Decryption
string encrypted = EncryptionHelper.Encrypt(plainText, key);
string decrypted = EncryptionHelper.Decrypt(encrypted, key);

7. Exposed Object Pattern

Dynamic property access without reflection overhead.

csharp
using Nextended.Core;

dynamic exposed = new ExposedObject(myObject);
exposed.PrivateField = "New Value";
var value = exposed.PrivateMethod("arg");

8. Notification Objects

INotifyPropertyChanged implementation helpers.

csharp
using Nextended.Core;

public class ViewModel : NotificationObject
{
    private string _name;
    
    public string Name
    {
        get => _name;
        set => SetProperty(ref _name, value);
    }
}

Supported Frameworks

  • .NET Standard 2.0
  • .NET Standard 2.1
  • .NET 8.0
  • .NET 9.0
  • .NET 10.0

Dependencies

  • Newtonsoft.Json - JSON serialization
  • YamlDotNet - YAML serialization
  • System.Linq.Dynamic.Core - Dynamic LINQ
  • StringToExpression - Expression parsing
  • Microsoft.Extensions.DependencyInjection.Abstractions - DI support

Examples

Complete Example: User Management

csharp
using Nextended.Core.Extensions;
using Nextended.Core.Types;

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Date BirthDate { get; set; }
    public Money Salary { get; set; }
}

public class UserDto
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public int Age { get; set; }
}

// Create user
var user = new User
{
    Id = 1,
    FirstName = "John",
    LastName = "Doe",
    BirthDate = new Date(1990, 1, 1),
    Salary = new Money(50000m, Currency.USD)
};

// Map to DTO with custom logic
var settings = ClassMappingSettings.Default
    .WithMapping<User, UserDto>((src, dst) => 
    {
        dst.FullName = $"{src.FirstName} {src.LastName}";
        dst.Age = (Date.Today - src.BirthDate).Days / 365;
    });

var dto = user.MapTo<UserDto>(settings);

// Serialize
var json = dto.ToJson();
Console.WriteLine(json);

API Reference

For a complete API reference, see:

  • Nextended.Cache - Builds on Core for caching
  • Nextended.EF - EF extensions using Core utilities
  • All other Nextended projects depend on Core