【问题标题】:WPF String Length ConverterWPF 字符串长度转换器
【发布时间】:2012-07-22 12:34:51
【问题描述】:

我正在使用转换器来检查字符串长度是否大于 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.");
    }

【问题讨论】:

  • return (value != null && value.ToString().Length > 0);
  • 我看不出有什么问题。代码可以更短,但除此之外,没关系。

标签: c# .net wpf ivalueconverter string-length


【解决方案1】:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    string str = value as string;
    return !String.IsNullOrEmpty(str);
}

【讨论】:

    【解决方案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."); 
    } 
    

    【讨论】:

    • 感谢所有答案!好吧,IsNullConverter 这个名字是因为首先它是一个 IsNullConverter 但那不起作用,所以我更改了代码但没有更改名称 xD
    【解决方案3】:

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

    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,则可以这样做

    【讨论】:

    • +1 以获得简洁的解决方案。但是你会把这个转换器称为IsNullConverter吗?
    • @Adam Mihalcin:我宁愿把它叫做StringLengthToBoolConverter。这样一来,每个人都一眼就知道这是为了什么以及它的作用。 IsNullConverter 来自最初的帖子,我刚刚复制了它:)
    【解决方案4】:

    这种方法怎么样:

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

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 2020-09-20
      • 1970-01-01
      • 2010-11-24
      • 2014-08-15
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多