Skip to content

Instantly share code, notes, and snippets.

View BenMakesGames's full-sized avatar

Ben Hendel-Doying BenMakesGames

View GitHub Profile
public sealed class PaginatedResults<T>
{
public required IReadOnlyList<T> Results { get; init; }
public required int Page { get; init; }
public required int PageSize { get; init; }
public required int TotalCount { get; init; }
public int TotalPages => (int)Math.Ceiling(TotalCount / (double)PageSize);
}
@BenMakesGames
BenMakesGames / BenchmarkDotNetProgram.cs
Created November 25, 2023 00:31
A simple Program.cs for selecting and running any of your BenchmarkDotNet benchmarks.
using System.Reflection;
using BenchmarkDotNet.Running;
// put all the benchmark classes into their own namespace, for easier discoverability. if you don't like this,
// change the next few lines to find your benchmarks using whatever logic you prefer.
const string BenchmarksNamespace = "YourBenchmarkNamespaceHere.Benchmarks";
var allBenchmarks = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t is { Namespace: BenchmarksNamespace, IsClass: true })
@BenMakesGames
BenMakesGames / creating-an-app-service-with-key-vault-and-application-insights.md
Created November 15, 2023 16:30
A walkthrough for how to create a basic .NET Core 8 app for App Service w/ Key Vault & Application Insights

Creating an App Service w/ Key Vault & Application Insights

  1. Create your App Service, Key Vault, and Application Insights

    1. Copy the Key Vault's "Vault URI" for later
    2. Copy the Application Insights' "Connection String" for later
  2. In the App Service's "Identity", turn the "System assigned" "Status" to "On"

  3. In the App Service's "Configuration", create a "New application setting" with value "KeyVaultURI", and value of the "Vault URI" you copied in step 1

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<WarningsAsErrors>Nullable</WarningsAsErrors>
</PropertyGroup>
<ItemGroup>
@BenMakesGames
BenMakesGames / .editorconfig
Created July 6, 2023 14:10
I like turning these .NET suggestions into ERRORS
[*.cs]
dotnet_diagnostic.IDE0005.severity = error # unnecessary using directives
dotnet_diagnostic.IDE0035.severity = error # unreachable code
dotnet_diagnostic.IDE0059.severity = error # unnecessary value assignment
dotnet_diagnostic.IDE0060.severity = error # unused parameter
@BenMakesGames
BenMakesGames / MoonPhase.cs
Created June 14, 2023 11:36
DateTimeOffset extension methods for computing the current phase of the moon
public static class DateTimeOffsetExtensions
{
private const double MoonCycleLength = 29.53058868;
public static MoonPhase ComputeMoonPhase(this DateTimeOffset dt)
{
return dt.GetMoonAge() switch
{
< 1.84566 => MoonPhase.NewMoon,
using System.DirectoryServices.AccountManagement;
using System.Runtime.InteropServices;
using System.Security.Principal;
using Microsoft.Win32.SafeHandles;
namespace YourNamespaceHere;
// Notes:
// * This class is a service. Hopefully you've got a DI/IoC container you can register it with. (For a desktop application,
// it'd probably make the most sense as a singleton.)

I translated the following methods from Java, for use in C#, over a year ago (sometime in early 2022, or late 2021). Maybe there's better versions of the same elsewhere; I dunno. If this is the best that you - o weary traveller of the internet - could find, then I hope you find them useful for your purposes.

Buy Me a Coffee at ko-fi.com

EncodeFilterValue

You know SQL injection attacks? Well, there's LDAP injection attacks, too.

The following method escapes values which you're tossing into LDAP search strings.

Having fun (or not) with LINQ and nulls

How to Where and Select your nulls away

Suppose I've got this list:

var customers = new List<Customer?>()
{
    new Customer() { Id = 123, CompanyName = "Bla" },

S-Tier

In no particular order.

Kasugai Gummy Candy

I personally find the Kiwi and Lychee ones kind of weird (and I've never tried the Ramune flavor), but by and large, these are fantastic.

Bonus points to the Melon and Yuzu flavors just for being different and uncommon to find in other gummies.