错误7,参数1:不能从转换'为“”(Error 7, argument 1: cannot

2019-09-02 11:16发布

我对面,我以前没有见过的错误来。 我希望有人可以提供帮助。

这里是我的代码:

public class MyT
{
    public int ID { get; set; }
    public MyT Set(string Line)
    {
        int x = 0;

        this.ID = Convert.ToInt32(Line);

        return this;
    }
}

public class MyList<T> : List<T> where T : MyT, new()
{
    internal T Add(T n)
    {
        Read();
        Add(n);
        return n;
    }
    internal MyList<T> Read()
    {
        Clear();
        StreamReader sr = new StreamReader(@"../../Files/" + GetType().Name + ".txt");
        while (!sr.EndOfStream)
            Add(new T().Set(sr.ReadLine())); //<----Here is my error!
        sr.Close();
        return this;
    }
}

public class Customer : MyT
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Item : MyT
{
    public int ID { get; set; }
    public string Category { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
}

public class MyClass
{
    MyList<Customer> Customers = new MyList<Customer>();
    MyList<Item> Items = new MyList<Item>();
}

在那说,该行 “添加(新T()设置(sr.ReadLine()));” 我得到“错误7,参数1:无法从‘Simple_Reservation_System.MyT’到‘T’转换”。 一个人可以帮我解决这个问题。

Answer 1:

你的类型MYLIST只能包含类型为“T”(当宣布列表中指定)的元素。 您要添加的元素的类型是“MYT”,不能downcasted为“T”的。

考虑这样MYLIST宣布与马来西亚时间MyOtherT的另一个亚型的情况。 这是不可能投给MYT MyOtherT。



Answer 2:

因为你的类型MyT是不一样的那个泛型参数T 。 当你写这个new T()创建类型的实例T ,必须从继承MyT ,但这并不一定类型MyT 。 看下面这个例子,看看我的意思是:

public class MyT1 : MyT
{

}
//You list can contains only type of MyT1
var myList = new MyList<MyT1>();

var myT1 = new MyT1();
//And you try to add the type MyT to this list.
MyT myT = myT1.Set("someValue");
//And here you get the error, because MyT is not the same that MyT1.
myList.Add(myT);


Answer 3:

你添加参数使用泛型类型T.您所设定的方法返回一个具体的类MYT。 这不等于T.在即使你把这个事实:

加入(新MYT())

它会返回一个错误。

我还想补充一点,这是唯一的,而你在MYLIST类中的错误。 如果从不同的类调用相同的方法,将工作。



文章来源: Error 7, argument 1: cannot convert from ' ' to ' '