@DrDeadCrash
@programming.devHere's a real world side project example of how I handle this situation:
public IResult<T> GetResourceValue<T>(string path)
{
string err = $"{typeof(T).FullName} is not available from this Resource ({nameof(FileSystemResource)})";
switch (typeof(T))
{
case Type t when t == typeof(DriveInfo):
return (IResult<T>)new Ok<DriveInfo>(BackingValue);
case Type t when t == typeof(DirectoryInfo):
err = $"Directory path invalid: {path}";
var dir = new DirectoryInfo(path);
if (dir.Exists)
return (IResult<T>)new Ok<DirectoryInfo>(dir);
break;
case Type t when t == typeof(FileInfo):
err = $"File path invalid: {path}";
var file = new FileInfo(path);
if (file.Exists)
return (IResult<T>)new Ok<FileInfo>(file);
break;
}
return new Error<T>(err);
}
You said elsewhere that it feels like you're doing something wrong if you have to check for every type just to use a Generic. I think you're right in thinking along those lines. There should be a minimal number of types to check, and Ideally limited via a type constraint.
Here's example that includes a constraint:
public IResult<T> GetValue<T>() where T : struct =>
typeof(T) switch
{
Type t when t == typeof(int) && value <= int.MaxValue =>
(IResult<T>)new Ok<int>((int)value),
Type t when t == typeof(uint) && value <= uint.MaxValue && value >= uint.MinValue =>
(IResult<T>)new Ok<uint>((uint)value),
Type t when t == typeof(byte) && value <= byte.MaxValue && value >= byte.MinValue =>
(IResult<T>)new Ok<byte>((byte)value),
Type t when t == typeof(sbyte) && value <= (int)sbyte.MaxValue =>
(IResult<T>)new Ok<sbyte>((sbyte)value),
Type t when t == typeof(short) && value <= (int)short.MaxValue =>
(IResult<T>)new Ok<short>((short)value),
Type t when t == typeof(ushort) && value <= ushort.MaxValue =>
(IResult<T>)new Ok<ushort>((ushort)value),
Type t when t == typeof(long) && value <= long.MaxValue =>
(IResult<T>)new Ok<long>((long)value),
Type t when t == typeof(ulong) => (IResult<T>)new Ok<int>((int)value),
_ => new IntegerError<T>()
};
In 2008 Americans elected a black man president, and the Republicans lost their shit and went scorched earth.
The relatively new Nostr protocol is a very interesting decentralized option. It uses relay servers to provide a secure connection between two (or more) clients which maintain the data, nothing is "stored" on the relay.
[their children] don’t have parents who show up and help them.
[their leadership] focuses on a political agenda more than they care about actually helping somebody’s life look better.
Every accusation is an admission...