Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么var returnText=值作为字符串不起作用?_C#_Wpf - Fatal编程技术网

C# 为什么var 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) {

我有一个Convert方法来实现IValueConverter。我的第一句话是 var returnText=作为字符串的值无法作为字符串接管该值。但是,它不起作用,在调试时,我发现“value”变量的值没有分配给returnText,因此returnText始终为空。这很奇怪。有人知道为什么吗

    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()