我可以用lambda缩短if / else语句吗?

时间:2013-08-14 16:00:10

标签: c# if-statement lambda

我有以下声明作为构建数据表的数据行的一部分,我想知道我是否可以使用lambda语句或更优雅的东西来缩短它。

if (outval(line.accrued_interest.ToString()) == true) 
{ 
temprow["AccruedInterest"] = line.accrued_interest; 
} 
else 
{
temprow["AccruedInterest"] = DBNull.Value;
}

该陈述由以下方式检查:

 public static bool outval(string value)
        {
            decimal outvalue;
            bool suc = decimal.TryParse(value, out outvalue);
            if (suc)
            {
                return true;
            }
            else
            {
                return false;
            }


        }

4 个答案:

答案 0 :(得分:2)

public static bool outval(string value)
{
    decimal outvalue;
    return decimal.TryParse(value, out outvalue);
}

temprow["AccruedInterest"] = outval(line.accrued_interest.ToString()) ? (object)line.accrued_interest : (object)DBNull.Value;

修改 转换为object非常重要,因为?:三元运算符需要返回结果,true case和false case都必须隐式转换为other。我不知道accrued_interest的类型是什么我认为它是doubledecimal,因为decimalDBNull之间没有隐式转换。为了使其工作,您必须转换为object类型。 那是清楚的吗?

答案 1 :(得分:2)

你想要吗?运算符,您不需要lambda表达式。

http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

int input = Convert.ToInt32(Console.ReadLine());
string classify;

// if-else construction.
if (input < 0)
    classify = "negative";
else
    classify = "positive";

// ?: conditional operator.
classify = (input < 0) ? "negative" : "positive";

答案 2 :(得分:1)

您无需调用单独的方法。不需要方法或任何其他东西

decimal result;   
if(decimal.TryParse(line.accrued_interest.ToString(),out result))
 temprow["AccruedInterest"] = line.accrued_interest
else
 temprow["AccruedInterest"] = DBNull.Value; 

答案 3 :(得分:0)

此外,

public static bool outval(string value)
{
    decimal outvalue;
    bool suc = decimal.TryParse(value, out outvalue);
    if (suc)
    {
        return true;
    }
    else
    {
        return false;
    }
}

要..

public static bool outval(string value)
{
    decimal outvalue;
    return decimal.TryParse(value, out outvalue);
}