函数参数中的 C# 列表
本文关键字:列表 参数 函数 | 更新日期: 2023-09-27 17:55:59
我是C#的新手。我想将一个列表作为参数,并从我从第一个列表获得的数据中返回另一个列表。
private List<DestinationGenericMapProps> ConstructDestinationMapPropsList(List<BoutiqueInWebService> datas)
{
var result = new List<DestinationGenericMapProps>(datas);
return result;
}
我收到此错误:
错误 241
System.Collections.Generic.List<VDDataUpdaterGeneric.DataObjects.DestinationGenericMapProps>.List(int)
的最佳重载方法匹配有一些无效参数
我知道这可能是非常基本的,但我是 C# 的新手,并且为此而苦苦挣扎。感谢您的帮助。
List<BoutiqueInWebService>
不是List<DestinationGenericMapProps>
。
除非BoutiqueInWebService
派生自DestinationGenericMapProps
,否则这将不起作用。
基本上,有一个List<T>(IEnumerable<T>)
构造函数,但 T 必须相同。
将返回类型更改为List<BoutiqueInWebService>
并更改新语句:
private List<BoutiqueInWebService> ConstructDestinationMapPropsList(List<BoutiqueInWebService> datas)
{
var result = new List<BoutiqueInWebService>(datas);
return result;
}
或将参数更改为类型 List<DestinationGenericMapProps>
:
private List<DestinationGenericMapProps> ConstructDestinationMapPropsList(List<DestinationGenericMapProps> datas)
{
var result = new List<DestinationGenericMapProps>(datas);
return result;
}
或者,如果您知道如何从BoutiqueInWebService
进行DestinationGenericMapProps
,则可以使用System.Linq
并对参数执行选择:
private List<DestinationGenericMapProps> ConstructDestinationMapPropsList(List<BoutiqueInWebService> datas)
{
var result = datas.Select(x => new DestinationGenericMapProps() { ... }).ToList();
return result;
}
您的方法返回类型是DestinationGenericMapProps
列表,但您正在尝试创建BoutiqueInWebService
列表(即数据)。
您可以执行此操作以匹配您的返回类型:
private List<DestinationGenericMapProps>
ConstructDestinationMapPropsList(List<BoutiqueInWebService> datas)
{
return (from d in datas
select new DestinationGenericMapProps()
{
// map properties here
Prop1 = d.SomePropInData
}).ToList();
}
您收到错误是因为您尝试使用不同类型的列表(BoutiqueInWebService)中的对象填充一种类型(DestinationGenericMapProps)的列表,该列表不是类型安全的。
只有当BoutiqueInWebService继承自DestinationGenericMapProps时,您才能执行此操作。
C# 支持函数重载,这意味着只要参数不同,一个类就可以有多个同名的函数。编译器通过压缩参数的类型来决定调用哪个重载。这也适用于构造函数。
List 类的构造子有三个重载:
List<T>()
List<T>(IEnumerable<T>)
List<T>(int)
我假设您正在尝试使用其中的第二个,因为它将从传入的列表创建一个新列表。对于您正在创建的列表,T 是一个 DestinationGenericMapProps。所以构造函数是:
List<DestinationGenericMapProps>()
List<DestinationGenericMapProps>(IEnumerable<DestinationGenericMapProps>)
List<DestinationGenericMapProps>(int)
您传入的列表已将 T 设置为 BoutiqueInWebService。因此,编译器试图在上面的列表中找到这样的构造函数。
List<DestinationGenericMapProps>(IEnumerable<BoutiqueInWebService>)
由于找不到,因此会引发您收到的错误。
是否可以将 BoutiqueInWebService 转换为 DestinationGenericMapProps 对象?如果是这样,您可以这样做:
var result = datas.Cast<DestinationGenericMapProps>().ToList()
如果无法直接投射,则可以像这样进行长手投掷:
var result = datas.Select(o => new DestinationGenericMapProps() { PropA = o.PropA, PropB = o.PropB /* etc */}).ToList();