C# 是否可以为类型化数据集表行字段值创建接口?
我在一个类型化数据集中有两个表,它们共享一些公共字段。我为这些字段创建了一个接口,并使用分部类将其添加到表行中。所有的东西都可以编译,但是当我尝试将它与接口一起使用时,它不起作用 我在某个地方读到,接口的实现需要在同一个分部类中。这种情况很糟糕,如果这是真的,他们应该让编译器抱怨 还有其他人碰到过这个吗?有解决办法吗 这是我的密码 首先是界面:C# 是否可以为类型化数据集表行字段值创建接口?,c#,interface,strongly-typed-dataset,C#,Interface,Strongly Typed Dataset,我在一个类型化数据集中有两个表,它们共享一些公共字段。我为这些字段创建了一个接口,并使用分部类将其添加到表行中。所有的东西都可以编译,但是当我尝试将它与接口一起使用时,它不起作用 我在某个地方读到,接口的实现需要在同一个分部类中。这种情况很糟糕,如果这是真的,他们应该让编译器抱怨 还有其他人碰到过这个吗?有解决办法吗 这是我的密码 首先是界面: public interface IDataField { //These two fields are generated in the ty
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 static void PopulateFieldDropdown(DropDownList ddlFields
, IEnumerable<IDataField> Fields
, string SelectedValue
, bool AddBlank
, string LanguageCode)
现在,字段是由数据集设计器在类型化数据集中生成的,我确信属性存在,所以我将接口添加到我创建的部分类文件中。这个类可以很好地编译,到目前为止它喜欢这个接口
public partial class Data
{
public partial class Data_FieldRow:IDataField
{
}
}
现在,我添加了一个使用该接口的方法:
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 static void PopulateFieldDropdown(DropDownList ddlFields
, IEnumerable<IDataField> Fields
, string SelectedValue
, bool AddBlank
, string LanguageCode)
我得到了错误
Argument '2': cannot convert from 'Data.Data_FieldDataTable' to 'System.Collections.Generic.IEnumerable<IDataField>
参数“2”:无法从“Data.Data\u FieldDataTable”转换为“System.Collections.Generic.IEnumerable”
解决方案:
显然,您不能只传入实现接口的某个对象的IEnumerable集合,您必须实际强制转换集合中的所有项
因此,在方法调用中,我必须将dataFieldTable更改为dataFieldTable.ToList().ConvertAll(c=>(IDataField)c)
感谢Ian Ringrose验证接口是否对生成的行字段值有效。
谢谢你,伊恩 我已经有了这项工作,为我好,请张贴一个简短的代码,显示你在做什么。你是对的,伊恩它确实工作。若你们发布一个简短的答案,我会标记你们作为答案,若你们愿意验证它是否有效。虽然为什么编译器在不将所有内容都转换为IEnumerable集合的情况下就无法找出它,但这对我来说毫无意义。我想我还有很多关于接口的知识要学。你必须使用4.0之前的.NET版本。从4.0开始,一些通用接口支持一个称为协方差的特性,它允许您将
IEnumerable
视为IEnumerable
。谷歌“协方差.NET泛型”(或者类似的东西),你应该在这个主题上找到一些有用的资源。谢谢你的信息!