为什么var returnText = value作为字符串不起作用?

时间:2013-09-30 13:18:16

标签: c# wpf

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

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

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

3 个答案:

答案 0 :(得分:9)

问题和解决方案

问题是as string没有转换,它只是将对象转换为字符串。如果这不起作用,它将生成null。该对象最初必须是字符串类型,在这种情况下显然不是这种情况。

在您的情况下可能适用的一个选项是在对象上调用.ToString(),如下所示:

var returnText = value.ToString();

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


其他建议

正如Tim所评论的那样,如果对象是ToString()null将抛出异常。建议在调用对象上的任何方法之前对其进行测试。这样的事情会做:

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

进一步阅读

See here for more information。来自该链接的一些有用的引用:

  

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

  

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

答案 1 :(得分:4)

var returnText = value==null ? "": value.ToString();

答案 2 :(得分:1)

因为 var returnText = value as string; 意味着:如果没有,请尝试强制转换值为string,返回null。

as(C#Reference)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