C# 为什么var returnText=值作为字符串不起作用?
我有一个Convert方法来实现IValueConverter。我的第一句话是 var returnText=作为字符串的值无法作为字符串接管该值。但是,它不起作用,在调试时,我发现“value”变量的值没有分配给returnText,因此returnText始终为空。这很奇怪。有人知道为什么吗C# 为什么var returnText=值作为字符串不起作用?,c#,wpf,C#,Wpf,我有一个Convert方法来实现IValueConverter。我的第一句话是 var returnText=作为字符串的值无法作为字符串接管该值。但是,它不起作用,在调试时,我发现“value”变量的值没有分配给returnText,因此returnText始终为空。这很奇怪。有人知道为什么吗 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var returnText = value as string;
if (!string.IsNullOrEmpty(returnText))
{
.....
问题和解决方案 问题是
作为字符串
不会转换,它只是将对象强制转换为字符串。如果这不起作用,它将生成null
。对象最初必须是字符串类型,在本例中,情况显然不是这样
在您的情况下,一个可能有效的选项是对对象调用.ToString()
,如下所示:
var returnText = value.ToString();
但请注意,这确实取决于对象类型以及.ToString()
方法实际生成的内容。您可能会得到一个您不期望的值
其他建议 正如Tim所评论的,
ToString()
将在对象开始时为null
时引发异常。建议在调用对象上的任何方法之前对此进行测试。这样做可以:
string returnText = null;
if(value != null)
returnText = value.ToString();
进一步阅读 。该链接中的两条有用的引语: as运算符类似于强制转换操作。但是,如果转换不可能,as将返回null而不是引发异常 及 请注意,as运算符仅执行引用转换、可为null的转换和装箱转换。as运算符不能执行其他转换,例如用户定义的转换,而应该使用强制转换表达式执行这些转换 因为这个变量returnText=作为字符串的值;方法:尝试将值转换为
字符串,如果不是,则返回null
as(C#参考)
为什么System.Convert.ToString()而不是.ToString()
我宁愿使用var returnText=System.Convert.ToString(value)代码>因为这将使用i可转换
界面。ToString()可能会给出一个错误的结果。(如类名等)
更多信息:Convert.ToString方法
var returnText = value==null ? "": value.ToString();
是否确定值的类型为字符串?是否确定value
的类型为string
<如果值
不是字符串
,则code>值作为字符串
将返回null
。请注意,如果值
为null
,则会引发异常。如果要将其默认为空字符串,可以执行(值??).ToString()
。@TimS:这一点很好。请注意,我没有使用您的单行程序,因为我希望使代码尽可能自解释。如果OP不熟悉syntaxIt,那么您的示例可能会混淆OP,因为Convert本身就是一个Convert方法,所以它无法工作。您应该使用全名(带命名空间):System.Convert.ToString()