This repository has been archived on 2022-08-05. You can view files and clone it, but cannot push or open issues or pull requests.
CC-Functions/Misc/GenericExtensions.cs

67 lines
2.0 KiB
C#
Raw Normal View History

2019-11-29 21:42:39 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
namespace CC_Functions.Misc
{
public static class GenericExtensions
{
public static T get<G, T>(this Dictionary<G, T> dict, G key, T def)
{
if (!dict.ContainsKey(key))
dict[key] = def;
return dict[key];
}
public static T set<G, T>(this Dictionary<G, T> dict, G key, T val)
{
dict[key] = val;
return dict[key];
}
public static bool tryCast<T>(this object o, out T parsed)
{
try
{
2019-12-22 16:58:16 +01:00
parsed = (T) o;
2019-11-29 21:42:39 +01:00
return true;
}
catch
{
2019-12-22 16:58:16 +01:00
parsed = default;
2019-11-29 21:42:39 +01:00
return false;
}
}
public static G selectO<T, G>(this T self, Func<T, G> func) => func.Invoke(self);
public static void runIf(bool condition, Action func)
{
if (condition)
func();
}
2019-12-30 15:09:16 +01:00
public static T ParseToEnum<T>(string value) => (T) Enum.Parse(typeof(T),
Enum.GetNames(typeof(T)).First(s => s.ToLower() == value.ToLower()));
2019-11-29 21:42:39 +01:00
2019-12-22 16:58:16 +01:00
public static bool? ParseBool(string value) =>
string.IsNullOrWhiteSpace(value) || value.ToLower() == "Indeterminate"
? (bool?) null
: bool.Parse(value);
2019-11-29 21:42:39 +01:00
public static bool AND(this bool? left, bool? right) => left.TRUE() && right.TRUE();
public static bool OR(this bool? left, bool? right) => left.TRUE() || right.TRUE();
2019-12-22 16:58:16 +01:00
public static bool XOR(this bool? left, bool? right) => left.OR(right) && !left.AND(right);
2019-11-29 21:42:39 +01:00
public static bool TRUE(this bool? self) => self == true;
public static bool FALSE(this bool? self) => self == false;
public static bool NULL(this bool? self) => self == null;
2019-12-30 15:09:16 +01:00
public static void RemoveAt<T, G>(this Dictionary<T, G> dict, int index) =>
dict.Remove(dict.Keys.OfType<T>().ToArray()[index]);
2019-11-29 21:42:39 +01:00
}
}