【问题标题】:trying to pass generic id's to class constructor试图将通用 id 传递给类构造函数
【发布时间】:2021-06-16 07:30:24
【问题描述】:

我的班级低于LibrarySourceTableInput 并且具有这样的结构

public class LibrarySourceTableInput<T> where T: ISourceOfData
{      
    public LibrarySourceTableInput(List<T> libraries, string mappedLibrarySource)
    {
        this.LibrarySourceRowInputs = libraries?.Select(l => new LibrarySourceRowInput()
            {
                LibrarySourceId = l.Id,
                SourceOfDataId = l.SourceOfData.Id
            }).ToList() ?? new(),
         this.MappedLibrarySource = mappedLibrarySource;
    }
    public List<LibrarySourceRowInput> LibrarySourceRowInputs { get; set; }
    public string MappedLibrarySource { get; set; }
}

然后接口ISourceOfData结构如下所示

public interface ISourceOfData : IIdentity
{
    public new Guid Id { get; set; }
    public CodeStandardGuideline SourceOfData { get; set; }
}

我正在像这样在其他地方调用上面的类构造函数

var mechanicalData = spaceTypeObject.TargetObject.MechanicalData;                           
 var librarySourceTableInputs = new List<LibrarySourceTableInput<ISourceOfData>>
 {
     new LibrarySourceTableInput<ISourceOfData>(mechanicalData?.Environments, mappedLibrarySource), // I am getting conversion error here 
     new LibrarySourceTableInput<ISourceOfData>(mechanicalData?.AirflowsA621 , mappedLibrarySource)
     .......
     .......
 }

mechanicaldata.environments 的结构是这样的

public class MechanicalData
{
    public List<LibraryEnvironment> Environments { get; set; }
    public List<LibraryA621> AirflowsA621 { get; set; }
    .......
}

然后最后一个 libraryEnvironment 类是这样的

 public class LibraryEnvironment : ISourceOfData
 {
    public virtual CodeStandardGuideline SourceOfData { get; set; }
    .....
    ......
    public Guid Id {get; set;}     
 }

我在这一行遇到以下错误new LibrarySourceTableInput&lt;ISourceOfData&gt;(mechanicalData?.Environments, mappedLibrarySource)

错误是Cannot convert from Generic.List&lt;LibraryEnvironment&gt; to Generic.List&lt;IsourceOfData&gt;

任何人都可以让我知道或知道如何将该通用列表发送到该类构造函数,非常感谢。

【问题讨论】:

  • 如果你绝对必须使用泛型类,你可能想看看这个问题:Collection of generic types
  • 没关系,我发现只需要转换到相应的接口

标签: c# .net list linq generics


【解决方案1】:

不要指定接口 ISourceOfData(您的类已经知道该类型将具有该接口),而是指定实际类:

var librarySourceTableInputs = new List<LibrarySourceTableInput<LibraryEnvironment>>
{
    new LibrarySourceTableInput<LibraryEnvironment>(mechanicalData?.Environments, mappedLibrarySource),
     .......
     .......
}

【讨论】:

  • 我将不同的类型传递给它,因为我需要定义 IsourceOfData 并且我更新了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2022-01-12
  • 2014-06-04
  • 2018-05-09
  • 2016-05-23
相关资源
最近更新 更多