0

我正在尝试自定义列表。我基本上已经弄清楚了,但遇到了一个问题。这是我正在使用的代码:

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>();
}

在代码中,您可以看到我正在尝试创建自定义列表。在这里,您还可以看到我拥有的众多课程中的两个。所有的类都有一个ID。所有类都与自定义列表匹配。问题似乎出在MyList<T>.Read()-Add(new T().Set(sr.ReadLine())); 最后,我知道 MyT 无法转换为 T。我需要知道如何解决它。

4

1 回答 1

1

Set方法返回类型MyT而不是特定类型。使其通用,以便它可以返回特定类型:

public T Set<T>(string Line) where T : MyT {
    int x = 0;
    this.ID = Convert.ToInt32(Line);
    return (T)this;
}

用法:

Add(new T().Set<T>(sr.ReadLine()));

或者将引用转换回特定类型:

Add((T)(new T().Set(sr.ReadLine())));
于 2013-05-10T09:56:28.217 回答