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

Jan*_*ang 3 c# wpf

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

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

        if (!string.IsNullOrEmpty(returnText))
        {
           .....
Run Code Online (Sandbox Code Playgroud)

mus*_*fan 9

问题和解决方案

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

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

var returnText = value.ToString();
Run Code Online (Sandbox Code Playgroud)

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


其他建议

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

string returnText = null;
if(value != null)
    returnText = value.ToString();
Run Code Online (Sandbox Code Playgroud)

进一步阅读

在这里看到更多的信息.来自该链接的几个有用的引用:

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

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