0

我正在使用一个类来存储连接字符串。我的应用程序从设置类中读取设置并将其分配给实例变量。然后将其绑定到一些控件。我的连接字符串类具有以下属性集:

[TypeConverter(typeof(ConnectionStringConverter))]

我的类型转换器如下所示。

问题是,如果设置文件中的设置为空白,则设置类返回 null。而不是我使用默认构造函数的连接字符串类的实例。

请有人能帮我解开这个谜语。

谢谢。

public class ConnectionStringConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        if (sourceType == typeof(string))
            return true;
        else
            return base.CanConvertFrom(context, sourceType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value is string)
            return (ConnectionString)(value as string);
        else
            return base.ConvertFrom(context, culture, value);
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType == typeof(string))
            return (string)(value as ConnectionString);
        else
            return base.ConvertTo(context, culture, value, destinationType);
    }
}
4

1 回答 1

0

我相信问题在这里:

public override object ConvertFrom(ITypeDescriptorContext context, 
    CultureInfo culture, object value)
{
    // The first condition.
    if (value is string)
        return (ConnectionString)(value as string);
    else
        return base.ConvertFrom(context, culture, value);
}

让我们分解条件语句:

if (value is string)

这很好,这是您将字符串转换为ConnectionString类的地方。

return (ConnectionString)(value as string);

这是问题线。如果value为 null,则value as string也为 null,并且您将返回一个 null 引用。

相反,你想这样做:

return (ConnectionString)(value as string) ?? new ConnectionString();

如果value为 null,则coalesce 运算符ConnectionString将提供使用默认无参数构造函数调用的类的实例。

于 2012-07-18T17:02:30.727 回答