3

我有一个实现 IValueConverter 的 Convert 方法。我的第一个语句是 var returnText = value as string 无法将值作为字符串接管。但是,它不起作用,当我调试时,我发现“value”变量的值没有分配给 returnText,所以 returnText 始终为空。这很奇怪。有人知道为什么吗?

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var returnText = value as string;

        if (!string.IsNullOrEmpty(returnText))
        {
           .....
4

3 回答 3

9

问题与解决方案

问题是它as string不会转换,它只是将对象转换为字符串。如果这不起作用,它将产生null。对象原本必须是字符串类型的,在这种情况下显然不是这样。

一种可能适用于您的情况的选项是.ToString()像这样调用对象:

var returnText = value.ToString();

但请注意,这确实取决于您的对象类型,以及它的.ToString()方法实际产生的内容。您可能会得到一个您不期望的值。


其他建议

正如蒂姆所评论的那样,如果对象开始,ToString()将引发异常。null建议在调用对象的任何方法之前对此进行测试。这样的事情会做:

string returnText = null;
if(value != null)
    returnText = value.ToString();

延伸阅读

请参阅此处了解更多信息。该链接中的一些有用的报价:

as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而不是引发异常。

请注意,as 运算符仅执行引用转换、可为空的转换和装箱转换。as 运算符不能执行其他转换,例如用户定义的转换,而应使用强制转换表达式来执行。

于 2013-09-30T13:20:08.277 回答
4

尝试

var returnText = value==null ? "": value.ToString();
于 2013-09-30T13:22:58.977 回答
1

因为这个var returnText = value as string; 意思是:尝试值视为string不是,返回null。

作为(C# 参考)http://msdn.microsoft.com/en-us/library/vstudio/cscsdfbt.aspx

为什么System.Convert.ToString()而不是.ToString()......

我宁愿使用var returnText = System.Convert.ToString(value);,因为这将使用IConvertable接口。ToString() 可能会给出错误的结果。(如类名等)

更多信息:Convert.ToString 方法 http://msdn.microsoft.com/en-us/library/astxcyeh.aspx

于 2013-09-30T13:20:52.257 回答