0

我有以下类和接口:

public interface IFieldFiller
    {
        string Content { get; set; }
        Boolean Nullable { get; set; }
        string Name { get; set; }
    }

[DataContract]
public class FieldFiller : IFieldFiller
{
    [DataMember]
    public string Content { get; set; }

    [DataMember]
    public Boolean Nullable { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public StoredProcedure StoredProcedure { get; set; }

    [DataMember]
    public string NameSpace { get; set; }
}

然后,我使用以下 Linq 语句来构建这些对象的列表:

Fields =  temp.merged_fields.Select(f => new FieldFiller { Name = f.name, NameSpace = f.@namespace, StoredProcedure = new StoredProcedure { Name = f.sproc1.name, Parameters = f.field_params.ToDictionary(p => p.sprocParam.name, p=>p.value)}}).ToList()

我不断收到以下异常:

Error   1   Cannot implicitly convert type 'System.Collections.Generic.List<Services.Data.EmailTemplateAccess.Contracts.FieldFiller>' to 'System.Collections.Generic.List<Services.Data.EmailTemplateAccess.Contracts.IFieldFiller>'    

我不明白为什么当 FieldFiller 实现 IFieldFiller 时会出现此错误。我已经验证它们在正确的命名空间中。任何帮助,将不胜感激。

4

1 回答 1

2

FieldFiller也是IFieldFillerList<FieldFiller>不是 a List<IFieldFiller>,您可以相应地转换它:

Fields =  temp.merged_fields
    .Select(f => (IFieldFiller)new FieldFiller { Name = f.name, NameSpace = f.@namespace, StoredProcedure = new StoredProcedure { Name = f.sproc1.name, Parameters = f.field_params.ToDictionary(p => p.sprocParam.name, p=>p.value)}})
    .ToList()

或者,使用 .NET 4,您可以使用它(请参阅:协方差和逆变):

...
    .Select(f => new FieldFiller { ... })
    .ToList<IFieldFiller>();

为什么不安全:

于 2013-08-12T23:38:53.617 回答