Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以为类型化数据集表行字段值创建接口?_C#_Interface_Strongly Typed Dataset - Fatal编程技术网

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泛型”(或者类似的东西),你应该在这个主题上找到一些有用的资源。谢谢你的信息!