我有一个实现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))
{
.....
答案 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