使用泛型类型列表编译错误CS0305

本文关键字:错误 CS0305 编译 列表 泛型类型 | 更新日期: 2023-09-27 18:02:23

csc /t:library strconcat.csusing System.Collections.Generic;出现错误时

strconcat.cs(9,17): error CS0305: Using the generic type
        'System.Collections.Generic.List<T>' requires '1' type arguments
mscorlib.dll: (Location of symbol related to previous error)  

.cs代码取自这里:使用公共语言运行时。
我检查了msdn上的描述,但到现在还不能编译

using System;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO;
using Microsoft.SqlServer.Server;
[Serializable]
[SqlUserDefinedAggregate(Format.UserDefined,  MaxByteSize=8000)]
public struct strconcat : IBinarySerialize{
        private List values;
        public void Init()    {
            this.values = new List();
        }
        public void Accumulate(SqlString value)    {
            this.values.Add(value.Value);
        }
        public void Merge(strconcat value)    {
            this.values.AddRange(value.values.ToArray());
        }
        public SqlString Terminate()    {
            return new SqlString(string.Join(", ", this.values.ToArray()));
        }
        public void Read(BinaryReader r)    {
            int itemCount = r.ReadInt32();
            this.values = new List(itemCount);
            for (int i = 0; i <= itemCount - 1; i++)    {
                this.values.Add(r.ReadString());
            }
        }
        public void Write(BinaryWriter w)    {
            w.Write(this.values.Count);
            foreach (string s in this.values)      {
                w.Write(s);
            }
        }
}

我正在运行Windows 7 x64与c:'Windows'Microsoft.NET'Framework'v2.0.50727以及c:'Windows'Microsoft.NET'Framework64'v2.0.50727>
如何编译?对不起,我刚开始学习c# -我在SO上搜索了一些其他问题,这些建议并没有给我带来进展(

使用泛型类型列表编译错误CS0305

)

对应CS0305的文章中解释的错误-类型参数数量不匹配。

在您的情况下,您调用new List()与零类型参数,而期望有一个:new List<string>()和相应的字段定义private List<string> values;

注意:如果你因为一些奇怪的原因想要非泛型版本对应的类命名为ArrayList,但泛型List<T>更容易和更安全的使用。

问题如上所述,您没有指定要在列表中存储的类型。将这部分修改如下

private List<string> values;
public void Init()
{
    this.values = new List<string>();
}

c#中的泛型需要指定它们使用的类型来代替<T>

System.Collections.Generic。List需要一个类型参数,在本例中似乎是SqlString,所以像这样更改代码的以下部分:

        private List<SqlString> values;
        public void Init()    {
            this.values = new List<SqlString>();
        }