通用<t>数据类型</t>

时间:2014-09-11 03:11:48

标签: c# arrays stack

我不知道如何在数组中添加字符串。

<T> [] Arreglo2;
Arreglo2[tope+1]="t";

错误:您无法将字符串转换为T.

3 个答案:

答案 0 :(得分:1)

鉴于这些评论并没有真正让我们到任何地方,我只是回顾一下我认为你可能要做的一些基础知识。

我看到它的方式,你想要完成的目标有三个主要选项。首先,我在尝试制作string数组时看到了一些工作。其次,我正在尝试创建一系列不同类型的工作。第三,我看到一些尝试创建具有泛型类型的数组的工作。让我们逐一看看你在这些情况下想要做些什么。

在所有这三种情况中,正如其他人指出的那样,您首先需要初始化阵列。就像你不能做这样的事情......

Form f;
f.Show();

...您无法创建数组并在不首先初始化的情况下使用它。我将在下面的解释中包括如何做到这一点。

  1. 您想要创建一个string数组。
  2. 这是我列出的最简单的案例。在这种情况下,您只需要一个字符串数组。只允许使用字符串。

    string[] arr = new string[10];
    
    arr[2] = "test value in the third (because arrays are zero-indexed) slot";
    

    您会注意到我将变量初始化为new string[10],这意味着在一个包含10个字符串元素插槽的数组中。

    1. 您想要创建具有不同类型的数组。
    2. 我前言说几乎在每种情况下这都是不好的做法。尽管如此,你在这里提出这个问题的事实证明,这可能不是你想要这样做的时候。强类型是一种神派,并且几乎肯定会使您的代码更可靠和可读。如果要执行此操作以便在单个变量中收集多个值,请使用具体类,或者甚至只使用Tuple<>

      但是为了做到这一点,你做的事与以前完全一样,但这次使用的是object类型(它位于C#中每个类的基础),而不是string

      object[] arr = new object[10];
      arr[1] = 12;
      arr[2] = "Test value";
      

      如您所见,第二个槽(同样,零索引)设置为一个值为12的整数,第三个槽是一个字符串。仔细使用它,因为在尝试运行任何容易出错的演员表之前,你总是想要检查每个元素的类型。

      1. 您需要一系列通用类型元素
      2. 这是最复杂的&#34;在这三个选项中,我将编写一种方法来解释它。从本质上讲,你想要记住,通常是键入&#34;通常键入&#34; 意味着动态输入。一旦为<T>提供了类型参数,就不会改变它。这里的实际实现与我们的第一种情况非常相似,只有string s。

        我写的方法是一个相当无用的方法,但它显示了基础知识。此方法创建一个包含给定元素类型的十个元素的数组,将第一个值设置为给定的元素,然后返回该数组。

        public T[] GetArrayWithFirstSet<T>(T value)
        {
            T[] arr = new T[10];
        
            arr[0] = value; // this is safe because the array and
                            // value have the same type, even if we
                            // don't really know what that type is yet.
                            // By the same token, though, I cannot safely
                            // assume anything about T, aside from the basics
                            // that we get from the object type.
        
            return arr;
        }
        

        您可以使用任何类型参数调用此方法。

        int[] ints = GetArrayWithFirstSet<int>(12);
        string[] strings = GetArrayWithFirstSet<string>("test");
        Form[] forms = GetArrayWithFirstSet<Form>(new Form1());
        

        尽管如此,在我们的方法中,我们无法调用T的任何内容,如果它是object,我们就无法调用。这意味着我们可以致电ToString()Equals(object b)GetHashCode()GetType()。我们不能只知道&#34;关于泛型类型的任何内容,除非我们向其附加where T : [class | interface]条件,但是对于另一个帖子。这就是为什么你不能假设&#34;原始示例中的T可从string字面值中分配。即使在我的第二个示例中,我使用string参数调用我们的方法,我也无法将任何元素设置为string文字 in 方法,但我可以在数组创建并由方法返回之后。

答案 1 :(得分:0)

如果没有看到更多的代码,我们无法确切知道发生了什么,但我可以指出,您从未初始化Arreglo2,但您正在尝试为索引分配值。那是你的第一个问题。试试这个answer。无论您的数组是什么类型,添加元素都是一样的。

答案 2 :(得分:0)

string [] Arreglo2 = new string [] {};             Arreglo2 [1] =&#34; T&#34 ;;

您必须初始化阵列。