kye="关键字";
              for(int i=0; i<keys.Length;i++ )
{ if(keys[i]==key)
return i;
return -1;
}
上面的代码:提示检测无法访问的代码:其中keys为一字符串数组.
假如在字符串数组中找不到值为"key"的时候会执行:return -1
相反如果找到了会执行return i不执行return -1 怎么会提示检测到无法访问的代码呢?

解决方案 »

  1.   

    不好意思,我那不是源代码,我一时着急写错了,我做的是按照书上定的"索引器"例子,最后就是输不出来结果,请大家帮忙看一下,为什么会输出空啊?
    using System;
    class IndexRecord
    {
    private string[]data=new string[6];
    private string[]keys={"Author","Publisher","Title","Subject","ISBN","Comments"};
    public string this[int idx]
    {
    set
    {
    if(idx >= 0 && idx<data.Length)
    data[idx]=value;
    }
    get
    {
    if(idx >=0 && idx>data.Length)
    return data[idx];
    return null;
    }
    }
    public string this[string key]
    {
    set
    {
    int idx=FindKey(key);
    this[idx]=value;
    }
    get
    {
    return this[FindKey(key)];
    }
    }
    private int FindKey(string key)
    {
    for(int i=0; i<keys.Length;i++ )
    if(keys[i]==key)
    return i;
    return -1;

    }
    static void Main()
    {
    IndexRecord record=new IndexRecord();
    record[0]="马克-吐温";
    record[1]="Crox出版社";
    record[2]="汤姆-索亚历险记";
    Console.WriteLine( record["Title"]);
    Console.WriteLine( record["Author"]);
    Console.WriteLine( record["Publisher"]);
    }
    }
      

  2.   

    不好意思,我看出来了,别笑了.
    但是我还是不明白刚才的问题;
         key="关键字";
                  for(int i=0; i<keys.Length;i++ )
    { if(keys[i]==key)
    return i;
    return -1;
    }
    上面的代码:提示检测无法访问的代码:其中keys为一字符串数组.
    假如在字符串数组中找不到值为"key"的时候会执行:return -1
    相反如果找到了会执行return i不执行return -1 怎么会提示检测到无法访问的代码呢?
      

  3.   

    public string this[int idx]
    {
    set
    {
    if(idx >= 0 && idx<data.Length)
    data[idx]=value;
    }
    get
    {
    if(idx >=0 && idx>data.Length)//是不是笔误?
    return data[idx];
    return null;
    }
    }
      

  4.   

    是笔误,但是我不明白如果把上面的完整程序的下面代码改成如下:(会提示检测到无法访问的代码是一个什么样的逻辑)
        for(int i=0; i<keys.Length;i++ )
         if(keys[i]==key)
             return i;
          return -1;把源代码改成(我知道如果改成这样子,对于整个程序来说就没什么意思了.但是我们现面只讨论这一小部分的代码,跟整个程序的逻辑无关):
        for(int i=0; i<keys.Length;i++ )
         { if(keys[i]==key)
             return i;
           return -1;
          }
    上面的代码:提示检测无法访问的代码:其中keys为一字符串数组.
    假如在字符串数组中找不到值为"key"的时候会执行:return -1
    相反如果找到了会执行return i不执行return -1 怎么会提示检测到无法访问的代码呢?上面的代码:提示检测无法访问的代码:其中keys为一字符串数组.
    假如在字符串数组中找不到值为"key"的时候会执行:return -1
    相反如果找到了会执行return i不执行return -1 怎么会提示检测到无法访问的代码呢?
      

  5.   

    编译错误,电脑和人脑的思维方式是不一样的。电脑只认定是不是在任何情况下都能有返回值,而i++无法检测的地方并非致命错误。LZ一定认为抛硬币不是正面就一定是反面,周星驰说了,还有中间:)
      

  6.   

    每个有返回值的函数都要以return为结束,应该是这样
      

  7.   

    你的函数以一个for语句结束,不满足语法要求
      

  8.   

    kye="关键字";
    for(int i=0; i<keys.Length;i++ )
    {
       if(keys[i]==key)
         return i;
       return -1;
    }首先说,上面的代码绝对不符合你的理解,他实际就执行一次:判断keys[0]是否==key,如果相等,返回0,如果不等返回-1,而i++这句代码实际上是无法执行的
      

  9.   

    正确的代码
    for(int i=0; i<keys.Length;i++ )
       if(keys[i]==key)
         return i;
    return -1;其实相当于for(int i=0; i<keys.Length;i++ )
    {
       if(keys[i]==key)
       {
         return i;
       }
    }
    return -1;你可以比较一下
      

  10.   

    for循环翻译成while循环的话int i=0;
    while(i<keys.length)
    {
         if(keys[i]==key)
             return i;
         return -1;
         i++;
    }从这里就可以清楚的看到无法访问的代码就是i++了