我有一个实现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)
问题和解决方案
问题是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运算符不能执行其他转换,例如用户定义的转换,而应使用转换表达式执行转换.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |