接线员'??'不能应用于'string'和'int'类型的操作数

时间:2013-01-30 15:40:42

标签: c#

如果没有价值,我无法将'Year'作为当前Year的默认值。

var now = DateTime.Now;
Year = int.Parse(bindingContext.ValueProvider.GetValue("Year").AttemptedValue ?? now.Year);

4 个答案:

答案 0 :(得分:7)

您必须在两个类似的类型上应用coalesce运算符。 String和int不一样。试试这个:

var year = 0;
if(!int.TryParse(bindingContext.ValueProvider.GetValue("Year").AttemptedValue, out year))
    year = DateTime.Now.Year;

在示例中,只有在AttemptedValue可解析为整数时才会替换year,否则它将是当前年份。

答案 1 :(得分:2)

似乎

bindingContext.ValueProvider.GetValue("Year").AttemptedValue

属于string类型,??运营商期望左/右值都属于同一类型。

作为案例,你现在可以做 .Year.ToString()

var now = DateTime.Now;
Year = int.Parse(
             bindingContext.ValueProvider.GetValue("Year").AttemptedValue 
             ?? now.Year.ToString()); 

答案 2 :(得分:2)

使用.ToString()

Year = int.Parse(bindingContext.ValueProvider.GetValue("Year").AttemptedValue ?? now.Year.ToString());

两个变量都必须属于同一类型。

答案 3 :(得分:0)

问题是你的一个值是一个字符串,一个是int,因此它无法决定转换的内容

您需要确保类型匹配,此问题应该消失。

我会使用.ToString()这样它们都是字符串。