只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句

Rob*_*ert 2 c# c#-4.0

我有这个foreach部分,我试图在我的"result = string.Format"之后添加一行但是我得到以下错误"只有赋值,调用,递增,递减,等待和新对象表达式可以用作语句"有人能告诉我我做错了什么.

foreach (DataRow record in table.Rows)
{
    string key = record["Code"] + "_" + record["Description"];
    int row = (int)rownum[key];

    string date = formatDate(record["ApptDate"].ToString(), "_");

    string result = string.Empty;
    if (record["Dosage"].ToString() != string.Empty)
        result = string.Format("{0}/{1}", test.SharedLib.Application.RemoveTrailingZeroes(record["Dosage"].ToString()), 
                                          test.SharedLib.Application.RemoveTrailingZeroes(record["Units"].ToString()));
    if (record["Dosage"].ToString() != string.Empty)
        result.StartsWith("/") && result.EndsWith("/") ? result.Replace("/", string.Empty) : result;
    else if (record["Units"].ToString() != string.Empty)
        result = record["Units"].ToString();

    dataTable.Rows[row]["ApptDate" + date] = result;
}
Run Code Online (Sandbox Code Playgroud)

cdh*_*wie 5

if (record["Dosage"].ToString() != string.Empty)
    result.StartsWith("/") && result.EndsWith("/") ? result.Replace("/", string.Empty) : result;
Run Code Online (Sandbox Code Playgroud)

第二行没有声明,它是一个表达式.并非所有表达式都可以是C#中的语句,因此这是语法错误.

大概你打算将结果分配给result:

if (record["Dosage"].ToString() != string.Empty)
    result = (result.StartsWith("/") && result.EndsWith("/")) ? result.Replace("/", string.Empty) : result;
Run Code Online (Sandbox Code Playgroud)

此外,您应该考虑使用大括号()括起if/ elseblocks 的主体{}.没有支撑,这些块嵌套的方式不直观,并且会妨碍将来的维护.(例如,你能告诉该ifelse if将属于哪个块吗?继承这个项目的下一个人是否能够不仅能说出差异,还能了解嵌套的意图吗?明确它!)

  • @David 虽然我基本上同意个人偏好,但这不是这样的情况。没有大括号的代码在维护时更容易被损坏,尤其是*完全*问题中的代码类型。根据问题,他插入了中间的“if”块。他的意思是让它成为第一个“if”块主体的一部分,并且他是否意识到“else”块现在属于新的“if”块而不是第一个块?大括号有助于准确消除此类问题的歧义。所有这些都是以包含最后一个“}”的额外一行为代价的。这是一个很好的权衡。 (2认同)

D.R*_*.R. 2

您必须对表达式的结果执行某些操作(例如将其分配给结果?!)

有关更多信息,您应该真正格式化并告诉我们有关您的代码的更多信息...所以用户不是您个人的编译器/调试器;-)