我有一个名为Product
的抽象类和另一个名为DifferentProduct
的类以及一个名为IProduct
的接口。
类Product
和类DifferentProduct
都来自名为IProduct
的接口。
public class Product : IProduct
{
public int ID { get; set; }
public string ProductName { get; set; }
}
public class DifferentProduct : IProduct
{
public int ID { get; set; }
}
public interface IProduct
{
int ID { get; set; }
}
我有传递的功能
ProductListing( List<IProduct>, List<IProduct> )
{
}
现在尝试从某个文件中调用函数
List<Product> productList1;
List<DifferentProduct> differentProductList;
XYZ.ProductListing( productList1, differentProductList );
我在上面的行中遇到以下错误
错误CS1503:参数1无法转换 'System.Collections.Generic.List'到 'System.Collections.Generic.List'
错误CS1503:参数2无法从System.Collections.Generic.List转换为 System.Collections.Generic.List
有没有办法在没有明确的类型转换的情况下解决这个问题? 我需要在没有明确的类型转换的情况下工作。
答案 0 :(得分:2)
试试这个:
var productList1 = new List<IProduct>();
productList1.Add(new Product());
var differentProductList = new List<IProduct>();
differentProductList.Add(new DifferentProduct)();
XYZ.ProductListing(productList1, differentProductList);
您也可以这样做:
ProductListing<T, U>(List<T> list1, List<U> list2) where T : IProduct, U : IProduct
答案 1 :(得分:1)
这是因为List<Product>
不是List<IProduct>
,与List<DifferentProduct>
相同。
如果ProductListing(...)
中的参数类型可以更改为IEnumerable<IProduct>
或IReadOnlyList<IProduct>
等协变界面,那么您可以毫无问题地传递Product
或DifferentProduct
的列表
这样的事情:
void ProductListing(IReadOnlyList<IProduct> list1, IReadOnlyList<IProduct> list2)
{
...
}
然后这是可能的:
List<Product> productList1;
List<DifferentProduct> differentProductList;
XYZ.ProductListing(productList1, differentProductList);
答案 2 :(得分:0)
尝试使用泛型:
class Program
{
static void Main(string[] args)
{
test t = new test();
List<Product> productList1 = new List<Product>();
List<DifferentProduct> differentProductList = new List<DifferentProduct>();
t.ProductListing(productList1, differentProductList);
}
}
public class test
{
public void ProductListing<T, U>(List<T> list1, List<U> list2)
where T : IProduct
where U : IProduct
{
}
}
public abstract class Product : IProduct
{
public int ID { get; set; }
public string ProductName{ get; set; }
}
public class DifferentProduct : IProduct
{
public int ID{get; set;}
}
public interface IProduct
{
int ID { get; set; }
}