【问题标题】:How to return a string from an int array method in C#如何从 C# 中的 int 数组方法返回字符串
【发布时间】:2015-10-07 05:07:35
【问题描述】:

我的方法应该检查我通过的 int 数组是否有任何负值,如果有,它应该将它们保存到一个字符串中并返回每个值以及它们所在的索引。现在该方法只返回数组的第一个负值。如何将每个负值及其索引添加到字符串中?

public static string FindNegative(int[] array)
{
    string yes = null;
    foreach (var n in array)
      {
        if (n < 0)
        {
            yes += (Array.IndexOf(array, n) + ":" + n + ",");  
        }
        return yes;
    }
    return null; 
}

【问题讨论】:

  • 将“返回是”移出 foreach 循环。

标签: c# arrays methods


【解决方案1】:
public static string FindNegative(int[] array)
{
    string yes = null;
    foreach (var n in array)
      {
        if (n < 0)
        {
            yes += (Array.IndexOf(array, n) + ":" + n + ",");  
        }

    }
    return yes;
}

虽然,这也可以:

public static string FindNegative(int[] array)
{
    return String.Join(",",array.Where(x=>x<0)
      .Select((e,i)=>String.Format("{0}:{1}",i,e)));
}

但是,我会推荐这个:

public class FindNegativeResult {
  public int Index {get;set;}
  public int Number {get;set;}
}
public static IEnumerable<FindNegativeResult> FindNegative(int[] array)
{
    return array.Where(x=>x<0)
      .Select((e,i)=>new FindNegativeResult {Index=i, Number=e});
}

【讨论】:

  • TrimEnd(',') 也可以,但是String.Join 不使用字符串连接,而是使用字符串生成器,因此速度也快了很多倍。
【解决方案2】:

那是因为你是从循环内部返回的,把代码改成下面,最后返回yes。

public static string FindNegative(int[] array)
{
    string yes = null;
    foreach (var n in array)
      {
        if (n < 0)
        {
            yes += (Array.IndexOf(array, n) + ":" + n + ",");  
        }
        //return yes;
    }
    return yes; 
}

【讨论】:

    【解决方案3】:

    改变你的代码如下:

    public static string FindNegative(int[] array)
    {
        string yes = null;
    
        foreach (var n in array)
          {
            if (n < 0)
            {
                yes += (Array.IndexOf(array, n) + ":" + n + ",");  
            }
        }
    
        return yes; 
    }
    

    【讨论】:

      【解决方案4】:
      public static string FindNegative(int[] array)
      {
          string yes = String.Empty;
      
          foreach (var n in array)
              if (n < 0)
                  yes += (Array.IndexOf(array, n) + ":" + n + ",");  
      
          return yes;
      }
      

      【讨论】:

      • StyleCop 等静态分析工具将捕获 foreach 循环和 if 条件周围缺少的大括号。 :p
      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2015-06-09
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多