以下是代码:
ProductList products = xxx.GetCarProducts(productCount);
List<CarImageList> imageList = new List<CarImageList>();
foreach(Product p in products)
{
string imageTag = HttpUtility.HtmlEncode(string.Format(@"<img src=""{0}"" alt="""">", ImageUrl(p.Image, false)));
imageList.Add(new CarImageList{ImageTag = imageTag});
i++;
}
在封面下,ProductList实际上是这样定义的:
public class ProductList : List<Product>
{
static Random rand = new Random();
public ProductList Shuffle()
{
ProductList list = new ProductList();
list.AddRange(this);
for (int i = 0; i < list.Count; i++)
{
int r = rand.Next(list.Count - 1);
Product swap = list[i];
list[i] = list[r];
list[r] = swap;
}
return list;
}
public Product FindById(int id)
{
foreach (Product p in this)
if (p.Id == id) return p;
return null;
}
public Product GetRandom()
{
int r = rand.Next(this.Count - 1);
return this[r];
}
}
那么当我尝试通过ProductList实例进行预告时,为什么会出现错误?
无法将'xxx.Product'类型转换为'产品'是我得到的错误。但是,如果ProductList真的是List,为什么世界上会出现转换问题?
答案 0 :(得分:1)
我认为您的xxx.GetCarProducts(productCount);
可能会返回对List<Product>
的引用,该引用的定义不如您的ProductList
类,这意味着在您的GetCarProducts方法中,您可能会执行新的List<Product>
new ProductList()
。
如果有什么可以张贴GetCarProducts
答案 1 :(得分:0)
在我看来,在第二个示例的上下文中,第一个示例的上下文中的Product
与Product
类型不同,而不是Product
。你确定你的命名空间已经整理好了吗?
答案 2 :(得分:0)
听起来你有两个不同的类,都叫做“Product”,但是在不同的命名空间/类中。 (公共)嵌套类是一个坏主意,因为它们会加剧这类问题......我会检查你对Product
的引用实际上是同一个类。
修改强>
void Main()
{
ProductList products = new ProductList();
products.Add(new Product("foo"));
products.Add(new Product("bar"));
foreach(Product p in products)
{
Console.WriteLine(p.Name);
}
}
// Define other methods and classes here
public class ProductList : List<Product>
{ /* [snip] the other stuff is irrelevant */ }
public class Product
{
public Product(string name)
{ Name = name; }
public string Name;
}
答案 3 :(得分:0)
您可能在不同的命名空间中有两种不同的Product
类型,或者您可能缺少using
语句。
另外,自定义集合类(例如ProductList
)应该继承自System.Collections.ObjectModel.Collection<T>
。