【问题标题】:if/then/else variable frustration in C#C# 中的 if/then/else 变量受挫
【发布时间】:2013-12-21 13:39:16
【问题描述】:

几天前我问了一个问题,人们非常乐意提供帮助。 我的情况发生了一些变化,我的代码也发生了变化。

我首先需要确定当前文章组是否是需要区别对待的几个文章组之一。如果是,它使用从数据库中检索到的完整值来定义 var“strbody”。如果它不是那些特殊的文章组之一,那么我必须在定义和显示它之前进行一些字符串操作来格式化检索到的值。

我的字符串操作代码正常工作,但是当我在代码块下方调用它时,我在 if/then/else 块中定义的 strbody 变量都没有被识别???

这是我的代码:

@{
    string group = Model.ArticleGroupName;
    if (group.Contains("Spacial Orientation")||group.Contains("Topography")||group.Contains("Osteology")||group.Contains("Angiology")||group.Contains("Neurology")||group.Contains("Myology")||group.Contains("Radiology")||group.Contains("Misc. Drawings")||group.Contains("Clinical Testing"))
    {
        var strbody = item.ShortBody;
    }
    else
    {
        string s = item.ShortBody;
        string sLess = s.Remove(0, 12);
        int index = sLess.IndexOf("Summary");
        var strbody = (sLess.Substring(index + 8));
    }
}
@strbody

这是错误:

\Plugins\FoxNetSoft.Articles\Views\ArticleRead\List.cshtml(76): error CS0103: The name 'strbody' does not exist in the current context

当我在任何一种可能的情况下定义它时,我都不明白 var 是如何不存在的......

我是新手,所以请不要犹豫,因为我做了愚蠢的事情而责备我......我需要学习!

更新:

它现在运行良好。感谢所有帮助过的人!

下面是最终的工作代码:

   @{
    string strbody = item.ShortBody;
    string group = Model.ArticleGroupName;
    var thestrbody = " ";

    if (group.Contains("Spacial Orientation")||group.Contains("Topography")||group.Contains("Osteology")||group.Contains("Angiology")||group.Contains("Neurology")||group.Contains("Myology")||group.Contains("Radiology")||group.Contains("Misc. Drawings")||group.Contains("Clinical Testing"))
        {
        thestrbody = strbody;
        }
    else
        {
        string s = item.ShortBody;
        string sLess = s.Remove(0, 12);
        int index = sLess.IndexOf("Summary");
        thestrbody = (sLess.Substring(index + 8));
        }
    }
   @thestrbody

【问题讨论】:

  • 请添加一个标签来表明这是什么语言。
  • 为什么要在 else 语句中声明 strbody
  • 在循环外声明变量,看看是否有效。

标签: c# string variables contains


【解决方案1】:

您在特定代码块内定义了它,并且范围在该代码块内。一旦关闭该块,变量就会超出范围。为了在该代码块之外使用它,您需要在之前声明它:

string strbody;
if(...)
{
    // set the value of strbody
}
@strbody

【讨论】:

  • 另外,必须在声明时初始化变量以使编译器满意并且代码没有错误。
  • @Dialectus:不一定。只要值在使用之前被初始化,编译器就不会关心,它就在这里。至于“没有错误”,有很多方法可以在初始化变量的代码中出现错误。 “没有错误”是深思熟虑的编码实践和自动化测试的问题。
  • @David 感谢您的回复,但我有点笨拙...不能在此范围内声明名为“strbody”的变量,因为它会给“strbody”赋予不同的含义,后者已在“父或当前”范围中用于表示其他内容
猜你喜欢
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多