我不知道如何在数组中添加字符串。
<T> [] Arreglo2;
Arreglo2[tope+1]="t";
错误:您无法将字符串转换为T.
答案 0 :(得分:1)
鉴于这些评论并没有真正让我们到任何地方,我只是回顾一下我认为你可能要做的一些基础知识。
我看到它的方式,你想要完成的目标有三个主要选项。首先,我在尝试制作string
数组时看到了一些工作。其次,我正在尝试创建一系列不同类型的工作。第三,我看到一些尝试创建具有泛型类型的数组的工作。让我们逐一看看你在这些情况下想要做些什么。
在所有这三种情况中,正如其他人指出的那样,您首先需要初始化阵列。就像你不能做这样的事情......
Form f;
f.Show();
...您无法创建数组并在不首先初始化的情况下使用它。我将在下面的解释中包括如何做到这一点。
string
数组。这是我列出的最简单的案例。在这种情况下,您只需要一个字符串数组。只允许使用字符串。
string[] arr = new string[10];
arr[2] = "test value in the third (because arrays are zero-indexed) slot";
您会注意到我将变量初始化为new string[10]
,这意味着在一个包含10个字符串元素插槽的数组中。
我前言说几乎在每种情况下这都是不好的做法。尽管如此,你在这里提出这个问题的事实证明,这可能不是你想要这样做的时候。强类型是一种神派,并且几乎肯定会使您的代码更可靠和可读。如果要执行此操作以便在单个变量中收集多个值,请使用具体类,或者甚至只使用Tuple<>
。
但是为了做到这一点,你做的事与以前完全一样,但这次使用的是object
类型(它位于C#中每个类的基础),而不是string
。
object[] arr = new object[10];
arr[1] = 12;
arr[2] = "Test value";
如您所见,第二个槽(同样,零索引)设置为一个值为12的整数,第三个槽是一个字符串。仔细使用它,因为在尝试运行任何容易出错的演员表之前,你总是想要检查每个元素的类型。
这是最复杂的&#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 ;;
您必须初始化阵列。