【问题标题】:C# Get accessor is inaccessibleC# Get 访问器不可访问
【发布时间】:2012-10-03 11:32:39
【问题描述】:

我有以下类定义:

 public static string SplitString(string someText)
 {
      var queryArray = Regex.Split(someText, "\\s+(?=\\w+)");
      foreach (var i in Enumerable.Range(0, queryArray.Count - 1)) {
           // Some code
      }
 }

问题是 queryArray.Count 给了我以下错误:

无法在此上下文中使用属性“System.Array.Count”,因为 get 访问器不可访问。

我在这里错过了什么?

【问题讨论】:

  • 据我所知,数组有一个Length 属性,而不是Count
  • queryArray 定义为string[] 而不是var,IDE 将帮助您解决这个问题:) {您应该在数组上使用Length 而不是Count}
  • 如前所述,数组上没有 Count 属性。我要补充的是,如果你看到 Count 在数组上被调用,很可能它是一个方法(所以,它是 myArray.Count() System.Linq 命名空间,因为它包含Count()的扩展方法。
  • 我仍然不明白他为什么会收到此错误。当我尝试复制时,我得到一个Cannot convert method group 'Count' to non-delegate type 'int'.。我不知道使用的用法,但由于 Enumerable 是在没有命名空间的情况下使用的,我猜想某处有一个 using System.Linq;,使用时会产生另一个错误。
  • @Paciv 可能是单声道编译器,或者 csc.exe 的旧版本。该错误表明.Count 成员正在解析ICollection<T>.Count 的显式实现,但我也无法使用 csc.exe (VS 2012) 重现该错误。我没有方便查看的单声道。

标签: c# arrays ienumerable enumerable


【解决方案1】:

您可以尝试使用Length 属性:

public static string SplitString(string someText)
{
    var queryArray = Regex.Split(someText, "\\s+(?=\\w+)");
    foreach (var i in Enumerable.Range(0, queryArray.Length - 1)) {
        // Some code
    }
}

如果你的代码写成这样,可能会更易读:

public static string SplitString(string someText)
{
    var queryArray = Regex.Split(someText, "\\s+(?=\\w+)");
    for (var i = 0; i < queryArray.Length; i++) {
        // Some code
    }
}

或者像这样:

public static string SplitString(string someText)
{
    var queryArray = Regex.Split(someText, "\\s+(?=\\w+)");
    foreach (var item in queryArray) {
        // Some code
    }
}

【讨论】:

  • 感谢您的回答...现在我觉得问起来很愚蠢...问题是我没有收到标准的“无法解析符号”错误,这表明 Count 方法不存在对于数组,这让我很困惑。
【解决方案2】:

Regex.Split 返回一个未定义 Count 属性的数组。请改用Length

 public static string SplitString(string someText)
 {
      var queryArray = Regex.Split(someText, "\\s+(?=\\w+)");
      foreach (var i in Enumerable.Range(0, queryArray.Length - 1)) {
           // Some code
      }
 }

【讨论】:

    【解决方案3】:

    你可以试试Length property

    【讨论】:

      【解决方案4】:

      当 Select 扩展程序会为您获取索引时,为什么还要担心索引:

      var data = Regex.Split("someText other", "\\s+(?=\\w+)")
                      .Select((itm, indexer) => string.Format("{0} is index {1}", itm, indexer));
      
      /* Data has 2 strings in the list:
      
      someText is index 0
      other is index 1
      
      */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 2023-04-01
        相关资源
        最近更新 更多