1

我正在使用转换器来检查字符串长度是否大于 0。如果它更大,我会返回 true,否则返回 false。

一切正常。但我想知道这是否是转换器的正确方法?

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool error = false;
        if (value != null)
        {
            if (value.ToString().Length > 0)
            {
                error = true;
            }
            else
            {
                error = false;
            }
        }
        return error;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
    }
4

4 回答 4

6
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    string str = value as string;
    return !String.IsNullOrEmpty(str);
}
于 2012-07-24T08:20:46.743 回答
2

这是使用转换器的正确方法,是的。但我可能会使用这样的东西:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return (value != null && value.ToString().Length > 0);
}

编辑

根据其他回复,您还可以使用以下方法:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return !string.IsNullOrEmpty(value as string);
}

如果您不希望非字符串对象返回,这将执行此操作true

于 2012-07-24T08:12:25.297 回答
2

所有其他解决方案的问题在于它们正在调用ToString()所有对象都支持的方法。但是我相信他/她不希望非字符串对象返回 true。如果是这种情况,那么这将做到:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    return !string.IsNullOrEmpty(value as string);
} 

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    throw new InvalidOperationException("IsNullConverter can only be used OneWay."); 
} 
于 2012-07-24T08:28:33.393 回答
1

这种方法怎么样:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    return (!string.IsNullOrEmpty(value as string));
}
于 2012-07-24T08:21:45.807 回答