C# 为什么可以';我是否可以使用这些方法检查已安装的字体?

C# 为什么可以';我是否可以使用这些方法检查已安装的字体?,c#,visual-studio-2013,fonts,C#,Visual Studio 2013,Fonts,我已经使用了下面这个主题中所有建议的方法,但是运气不好 调试时,它总是在“If”条件行之后跳过,而不进行检查。 我不知道为什么 例如: string fontName = "Consolas"; float fontSize = 12; using (Font fontTester = new Font( fontName, fontSize, FontStyle.Regular, GraphicsUnit.Pixel)) {

我已经使用了下面这个主题中所有建议的方法,但是运气不好

调试时,它总是在“If”条件行之后跳过,而不进行检查。 我不知道为什么

例如:

string fontName = "Consolas";
float fontSize = 12;

using (Font fontTester = new Font( 
       fontName, 
       fontSize, 
       FontStyle.Regular, 
       GraphicsUnit.Pixel)) 
{
    if (fontTester.Name == fontName) <<<<< [1] 
    {
        // Font exists
    }
    else
    {
        // Font doesn't exist
    }
} <<<<< [2]
更新:


我再次检查了我的项目属性,并在“构建”选项卡中取消选中“优化代码”,然后它就工作了。

所以。。。
fontTester.Name
的值是多少?好吧,除非抛出异常,否则它不可能从
[1]
跳到
[2]
。您确定您提供的代码与您用于测试的代码完全相同吗?您是否使用了任何
try..catch
语句?是吗?@AlexeiLevenkov如果未安装中的“Consolas”,则默认情况下,“fontTester.Name”将是“Microsoft Sans Serif”。@tumsd923我是说您应该删除所有try-catch语句,并确保不会引发任何异常。如果您在此处显示的代码与您在测试中使用的代码不同,请回答问题并包含相同的代码,并确保它是a。正如@AhmedAbdelhameed所说的那样,
If
的任何分支都不会被跳过。。。请注意,如果您正在调试优化/发布版本,并且if的分支中没有实际代码(如本文所示),则调试器将“跳过”没有为其生成代码的行,从而导致您声明的行为。由于一般的预期是,问题的作者在他们调试的实际代码与问题中发布的代码之间存在误导,因此很难确定到底发生了什么。
private static void Main(string[] args)
{
    if (args.Length == 0)
    {
        args = new string[] { AppDomain.CurrentDomain.BaseDirectory + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".txt" };
    }
    if (args.Length > 0)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        string fontName = "Free 3 of 9 Extended";
        float fontSize = 12;

        using (Font fontTester = new Font( 
               fontName, 
               fontSize, 
               FontStyle.Regular, 
               GraphicsUnit.Pixel)) 
        {
             if (fontTester.Name == fontName)
             {
                 // Font exists
             }
             else
             {
                 // Font doesn't exist
             }
        }

        Application.Run(new MenuForm());
    }
}