ich so etwas wie dies verwenden könnte ...Ist es möglich, zur Laufzeit den aktuellen ungeprüften/geprüften arithmetischen Kontext zu erkennen?
private static readonly int IntMaxValue = int.Parse(int.MaxValue.ToString());
private static bool IsChecked()
{
try {
var i = (IntMaxValue + 1);
return false;
}
catch (OverflowException) {
return true;
}
}
zu überprüfen ... aber das ist eine Menge Aufwand in einer engen Schleife, Werfen und Fangen nur um es zu erkennen. Gibt es einen leichteren Weg, dies zu tun?
EDIT für mehr Kontext ...
struct NarrowChar
{
private readonly Byte b;
public static implicit operator NarrowChar(Char c) => new NarrowChar(c);
public NarrowChar(Char c)
{
if (c > Byte.MaxValue)
if (IsCheckedContext())
throw new OverflowException();
else
b = 0; // since ideally I don't want to have a non-sensical value
b = (Byte)c;
}
}
Wenn die Antwort nur ‚Nein‘ ist, keine Angst, einfach zu sagen, dass :)
Dies hat [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) über alles geschrieben. Was versuchst du wirklich zu lösen? (Egal was ist der Punkt des Sendens von 'int.MaxValue' round-trip durch einen' string' Wert? Warum dieses Feld überhaupt, und warum es so initialisieren?) –
@PeterDuniho der Compiler wird Sie offensichtlich nicht überlaufen lassen . Ich komme nur in dem Beispiel herum. –
@PeterDuniho Ich implementiere einen Typ, der die gleiche Semantik wie die primitiven Typen haben soll (in diesem Fall sind es Umwandlungsoperatoren von einem größeren Typ) –