Compruebe si existe un carácter en la codificación

Estoy escribiendo un programa que una parte representa una fuente de mapa de bits en CP437.

En una función que muestre el texto con la que quiero poder comprobar si unchar está disponible en CP437 antes de la conversión de codificación, como:

public static void DrawCharacter(this Graphics g, char c)
{
    if (char_exist_in_encoding(Encoding.GetEncoding(437), c) {
        byte[] src = Encoding.Unicode.GetBytes(c.ToString());
        byte[] dest = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(437), src);
        DrawCharacter(g, dest[0]); // Call the void(this Graphics, byte) overload
    }
}

Sin la verificación, cualquier carácter fuera de CP437 resultará en un'?' (63, 0x3F). Quiero ocultar completamente cualquier carácter inválido. ¿Hay una implementación dechar_exist_in_encoding aparte del siguiente enfoque estúpido?

private static bool char_exist_in_encoding(Encoding e, char c)
{
    if (c == '?')
        return true;
    byte[] src = Encoding.Unicode.GetBytes(c.ToString());
    byte[] dest = Encoding.Convert(Encoding.Unicode, e, src);
    if (dest[0] == 0x3F)
        return false;
    return true;
}

Quizás no sea muy relevante, pero el mapa de bits se crea así:

Bitmap b = new Bitmap(256 * 8, 16);
Graphics g = Graphics.FromImage(b);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit;
Font f = new Font("Whatever 8x16 bitmap font", 16, GraphicsUnit.Pixel);
for (byte i = 0; i < 255; i++)
{
    byte[] arr = Encoding.Convert(Encoding.GetEncoding(437), Encoding.Unicode, new byte[] { i });
    char c = Encoding.Unicode.GetChars(arr)[0];
    g.DrawString(c.ToString(), f, Brushes.Black, i * 8 - 3, 0); // Don't know why it needs a 3px offset
}
b.Save(@"D:\chars.png");

Respuestas a la pregunta(1)

Su respuesta a la pregunta