【问题标题】:Getting error in Inline if condition in c#如果 C# 中的条件在 Inline 中出现错误
【发布时间】:2011-09-07 17:52:34
【问题描述】:

我正在尝试获取如下所示的字符串值

string bsgrpval;
bsgrpval =
    ConfigurationSettings.AppSettings["Pricing_IncludeALLBaseLineGroup"]=="False"
        ? string.Empty
        : bsgrp.ForEach(x => bsgrpval = bsgrpval + x.Value.ToString() + ",");

我收到以下错误:

无法确定条件表达式的类型,因为存在 'string' 和 'void' 之间没有隐式转换

有人可以帮我吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

    如果那样的话,你不能做内联。 List.ForEach 不返回任何内容。

    condition ? x : y;
    

    xy 必须返回某些内容并且类型相同(或具有隐式转换)。

    也许你想要一个字符串连接。

    bsgrpval = ConfigurationSettings.AppSettings["Pricing_IncludeALLBaseLineGroup"]=="False"
            ? string.Empty
            : string.Join(',', 
                 bsgrp.Select(x => bsgrpval = bsgrpval + x.Value.ToString()).ToArray());
    

    【讨论】:

    • +1 - OP,三级运算符的两个结果必须能够返回相同的类型:又名true ? "Hello World" : new Object() 无效。
    【解决方案2】:

    发生错误是因为.ForEach 不返回字符串。使用.Aggregate

    string bsgrpval;  
    bsgrpval=ConfigurationSettings.AppSettings["Pricing_IncludeALLBaseLineGroup"] == "False" string.Empty : bsgrp.Aggregate((acc, item) => string.Concat(acc, ",", item.Value.ToString())); 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 2021-11-16
    • 2021-09-13
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多