使用Reflection获取Nullable布尔值

时间:2014-07-14 16:09:02

标签: c# winforms reflection

我正在尝试使用反射的可空布尔值。这些值来自DB,所以我必须保持它们相同。

这是我正在使用的代码。

public partial class PrinterConfigUC : UserControl
{
    prtsetup Printer { get; set; }

    public PrinterConfigUC(prtsetup printer)
    {
        InitializeComponent();
        this.Printer = printer;
        lblPrinterName.Text = Printer.prtname;

        var properties = printer.GetType().GetProperties();          

        foreach (var prop in properties)
        {
            //In debug, a nullable bool had a type name of "Nullable`1"
            if (prop.PropertyType.Name.Equals("Nullable`1"))
            {
                bool? tempBool = (bool?)prop.GetValue(prop, null);
            }
        }
    }

如果我在bool? tempBool = (bool?)prop.GetValue(prop, null);处设置一个断点并执行该行,程序将停止进一步执行并向我显示一个空白的winform。没有其他事情发生。没有错误消息,程序也不会崩溃,只是挂在那一行上。

1 个答案:

答案 0 :(得分:0)

改变这个:

bool? tempBool = (bool?)prop.GetValue(prop, null);

要:

bool? tempBool = (bool?)prop.GetValue(printer, null);

GetValue的第一个arg是源代码,它是上例中的打印机,而不是属性元素。