我在类型化数据集中有几个表,它们共享一些公共字段。我为这些字段创建了一个接口,并将其添加到具有分部类的表行中。所有内容都会编译,但是当我尝试将其与界面一起使用时,它不起作用。
我在某处读到了接口的实现需要在同一个分部类中。这种情况很糟糕,如果这是真的,他们应该让编译器抱怨。
有没有其他人遇到这个?任何解决方法?
这是我的代码
首先是界面:
public interface IDataField
{
//These two fields are generated in the typed data tables
string Data_Field_Name { get; set; }
int Data_Field_ID { get; set; }
}
现在,字段是在数据集设计器的类型化数据集中生成的,以及所有这些,我确信这些属性存在,所以我将接口添加到我创建的部分类文件中。这个类编译得很好,它喜欢到目前为止的接口。
public partial class Data
{
public partial class Data_FieldRow:IDataField
{
}
}
现在我添加一个方法来使用该接口:
public static void PopulateFieldDropdown(DropDownList ddlFields
, IEnumerable<IDataField> Fields
, string SelectedValue
, bool AddBlank
, string LanguageCode)
所有事情都归于此。 现在当我试着打电话的时候
using (DataTableAdapters.Data_FieldTableAdapter a = new DataTableAdapters.Data_FieldTableAdapter())
{
Data.Data_FieldDataTable dataFieldTable = a.GetData();
globals.ui.PopulateFieldDropdown(ddlFields, dataFieldTable, null, true, globals.LanguageCode);
}
我收到错误
Argument '2': cannot convert from 'Data.Data_FieldDataTable' to 'System.Collections.Generic.IEnumerable<IDataField>
解决方案: 显然你不能只传入实现接口的IEnumerable集合,你必须实际上转换集合中的所有项目。
因此,在方法调用中,我必须将 dataFieldTable 更改为 dataFieldTable.ToList()。ConvertAll(c =&gt;(IDataField)c)
感谢Ian Ringrose验证接口是否适用于生成的行字段值。 谢谢伊恩!