声明采用任何DateType数组的方法?

mp3909

众所周知的成员
加入
2018年4月22日
消息
61
地点
英国
编程经验
3-5
在下面的代码中,我要求用户提供多维数组的尺寸。
然后告诉用户以输入数组的值。
然后,我希望通过将其传递给名为DISPLAY的方法来显示数组的内容。
我有问题是如何使此方法接受任何数据类型的数组?
例如,如果我创建一个包含字符串数据类型的数组,我想显示其内容,那么我不想为此创建一个单独的方法。我希望能够将它传递给同样的方法。
谢谢!



C#:
using System;
public class Program
{
       public static void Main()
       {
          Console.WriteLine("Enter the number of rows: ");
          int rows = int.Parse(Console.ReadLine());
  
          Console.WriteLine("Enter the number of columns: ");
          int cols = int.Parse(Console.ReadLine());
   
          int[,] matrix = new int[rows,cols];
  
          Console.WriteLine("Enter the values for your matrix");
  
          for(int x=0; x<rows; x++)
          {
               for(int y=0; y<cols; y++)
              {
                   matrix[x,y] = int.Parse(Console.ReadLine());
              }
          }
  
          Program.display(matrix);
       }

       public static void display([COLOR=#00ff00]??[/COLOR] [,] arr)  //what datatype to use here for the array if this method can accept string,float,int etc?
       {
                  for(int x=0; x<arr.GetLength(0); x++)
                  {
                       for(int y=0; y<arr.GetLength(1); y++)
                       {
                           Console.Write(arr[x,y] + " ");
                       }
                  Console.WriteLine();
                  }
        }
}
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,710
地点
悉尼,澳大利亚
编程经验
10+
您可以为此编写一个通用方法:
public static void Display<T>(T[,] arr)  //what datatype to use here for the array if this method can accept string,float,int etc?
{
    for(int x=0; x<arr.GetLength(0); x++)
    {
        for(int y=0; y<arr.GetLength(1); y++)
        {
            Console.Write(arr[x,y].ToString() + " ");
        }

        Console.WriteLine();
    }
}
 

克鲁尔

成员
加入
2018年4月20日
消息
8
编程经验
Beginner
你好, jmplhinney.
我正试图弄清楚如何调用此方法。我试过:
C#:
string[] sa = { "a", "b", "c" };
 Display<string>(sa);
或者
C#:
Display<string>(string["a", "b", "c"]);

但我得到了错误,我不太了解如何通过参数。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,710
地点
悉尼,澳大利亚
编程经验
10+
Hi, jmplhinney.
我正试图弄清楚如何调用此方法。我试过:
C#:
string[] sa = { "a", "b", "c" };
 Display<string>(sa);
或者
C#:
Display<string>(string["a", "b", "c"]);

但我得到了错误,我不太了解如何通过参数。

您以任何正常方式创建一个数组,然后只需呼叫显示并传递阵列,例如,
var strings = new [] {"a", "b", "c"};

Display(strings);

当您呼叫显示时,您不需要明确指定T,因为它是从参数推断出来的。该参数被声明为t的数组,因此如果传递一组字符串,则将t为字符串。
 

克鲁尔

成员
加入
2018年4月20日
消息
8
编程经验
Beginner
谢谢回答 jmplhinney. ,
我仍然收到错误(在代码中注释它):

using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication4
{
    class Program
    {
        // [url]http://www.sarahs-loft.com/showthread.php/3950-Declaring-a-method-that-takes-an-array-of-any-datetype?p=9309#post9309[/url]
        // 您可以为此编写一个通用方法:
        public static void Display<T>(T[,] arr)  // what datatype to use here for the array if this method can accept string,float,int etc?
        {
            for (int x = 0; x < arr.GetLength(0); x++)
            {
                for (int y = 0; y < arr.GetLength(1); y++)
                {
                    Console.Write(arr[x, y].ToString() + " ");
                }


                Console.WriteLine();
            }
        }
        static void Main(string[] args)
        {


            var strings = new[] { "a", "b", "c" };


            Display(strings);
            // The above yields the following error:
            /* Error    1    
            * The type arguments for method 'ConsoleApplication4.Program.Display<T>(T[*,*])' cannot be inferred from the usage.
            * Try specifying the type arguments explicitly.
            */
        }
    }
}
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,158
地点
挪威
编程经验
10+
发布的您的请求和显示方法是用于多维数组,然后稍后您尝试使用单维数组。如果这是它将按预期工作的样本:
var strings = new[,] { { "a", "b" }, { "c", "d" } };
 

克鲁尔

成员
加入
2018年4月20日
消息
8
编程经验
Beginner
发布的您的请求和显示方法是用于多维数组,然后稍后您尝试使用单维数组。如果这是它将按预期工作的样本:
var strings = new[,] { { "a", "b" }, { "c", "d" } };

谢谢约翰哈!
事实上,我认为它需要t [,]争论 - 我的眼睛只是没有调整到C#
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,710
地点
悉尼,澳大利亚
编程经验
10+
Thank you JohnH !
事实上,我认为它需要t [,]争论 - 我的眼睛只是没有调整到C#

显然,我也是。我没有看过这个帖子一段时间,我也错过了它是一个2D阵列。您当然可以重新实现1D数组的显示。
 

克鲁尔

成员
加入
2018年4月20日
消息
8
编程经验
Beginner
您当然可以重新实现1D数组的显示。


是的,正是我所做的是为了理解它 -
public static void DisplaySignleArray<T>(T[] arr)  // what datatype to use here for the array if this method can accept string,float,int etc?
{
  for (int i = 0; i < arr.GetLength(0); i++)
    {
      Console.Write(arr[i].ToString() + " ");
    }
  }



显然,我也是。我没有看过这个帖子一段时间,我也错过了它是一个2D阵列。


是的,问题是我们中的一些人太新鲜/绿色(或至少我),因此在该点需要无错误的例子(否则它变得太令人沮丧)。
最后一个问题,根据什么类别的c#涵盖了这一点 - 我认为它是它的 仿制 one?
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,710
地点
悉尼,澳大利亚
编程经验
10+
最后一个问题,根据什么类别的c#涵盖了这一点 - 我认为它是它的 仿制 one?

这是一种通用方法,使得部分可能应该涵盖该主题,如果不提供具体使用阵列的示例。
 
最佳 底部