gpt4 book ai didi

c# - 无法在列表中将类型 'uint' 隐式转换为 'T'(来自类模板)

转载 作者:行者123 更新时间:2023-11-30 05:34:08 25 4
gpt4 key购买 nike

我正在将代码从 C++ 转换为 C#,但是对于泛型变量问题的 vector 部分有一些问题。我是 C# 的初学者。

C++代码:

  Pvec(){}
Pvec(size_t n): p(n) {}
Pvec(size_t n, T v): p(n, v) {}

template<class T2>
Pvec(const vector<T2>& v) {
for (int i = 0; i < p.size(); ++i)
p[i] = v[i];
}

template<class T2>
Pvec(const Pvec<T2>& v) {
p.resize(v.size());
for (int i = 0; i < v.size(); ++i)
p[i] = v[i];
}

C# 代码(由我转换但面临很多错误):

public class Pvec <T>
{
private List<T> p = new List<T>();

public Pvec()
{
}
public Pvec(uint n)
{
this.p = n;
}
public Pvec(uint n, T v)
{
this.p = new List<T>(n, v);
}

//ORIGINAL LINE: template<class T2>
public Pvec<T2>(List<T2> v)
{
for (int i = 0; i < p.Count; ++i)
{
p[i] = v[i];
}
}

//ORIGINAL LINE: template<class T2>
public Pvec<T2>(Pvec<T2> v)
{
p.resize(v.size());
for (int i = 0; i < v.size(); ++i)
{
p[i] = v[i];
}
}

我在类里面有两个以上的模板怎么样?

最佳答案

您的代码存在一些问题。首先,您要分配 uintList<T> ,其中不存在此类转换。此外,您正在尝试设置 List<T>构造函数采用 int 类型的计数而不是 uint .你需要做什么:

  1. 使用this.p = new List<T>()它使用 List<T> build 者
  2. 要么接受 int , 或者转换 uintint .
  3. 我会留下 p 的声明未实例化,因为您无论如何都在构造函数中对其进行初始化。
  4. 使用构造函数链

    public class Pvec<T>
    {
    private List<T> p;
    private const int DefaultVectorSize = 4;

    public Pvec() : this(DefaultVectorSize, default(T))
    {
    }
    public Pvec(uint n) : this((int)n, default(T))
    {
    }
    public Pvec(uint n, T v)
    {
    var capacity = (int)n;
    p = EqualityComparer<T>.Default.Equals(v, default(T)) ?
    new List<T>(capacity) { v } : new List<T>(capacity);
    }
    }

或者:

public class Pvec<T>
{
private List<T> p;
private const int DefaultVectorSize = 4;

public Pvec() : this(DefaultVectorSize, default(T))
{
}
public Pvec(int n) : this(n, default(T))
{
}
public Pvec(int n, T v)
{
p = EqualityComparer<T>.Default.Equals(v, default(T)) ?
new List<T>(n) { v } : new List<T>(n);
}
}

旁注 - 给你参数有意义的名字。

关于c# - 无法在列表中将类型 'uint' 隐式转换为 'T'(来自类模板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34384447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com