C# 扩展属性,同时插入新项

C# 扩展属性,同时插入新项,c#,.net,linq,properties,extend,C#,.net,Linq,Properties,Extend,这是我的代码: var myList = myPage.News.Cast<MyNew>(); MyNew有20个属性名称、标题、日期、地点等,但缺少一个,例如属性电话 无法重新创建我的整个结构,它也是从一个DLL变成的,所以我想更快地在列表中添加一个名为Tel的MyNew属性。因此,在列表中插入期间扩展类。否,但您可以创建一个匿名类型,其中包括原始类型和新列: var myList = myPage.News .Cast<MyNew&g

这是我的代码:

var myList = myPage.News.Cast<MyNew>();
MyNew有20个属性名称、标题、日期、地点等,但缺少一个,例如属性电话


无法重新创建我的整个结构,它也是从一个DLL变成的,所以我想更快地在列表中添加一个名为Tel的MyNew属性。因此,在列表中插入期间扩展类。

否,但您可以创建一个匿名类型,其中包括原始类型和新列:

var myList = myPage.News
                   .Cast<MyNew>()
                   .Select( new { m => MyNew = m,
                                       Tel = [formula for tel]
                                }
                          );

不可以,但您可以创建一个匿名类型,其中包括原始类型和新列:

var myList = myPage.News
                   .Cast<MyNew>()
                   .Select( new { m => MyNew = m,
                                       Tel = [formula for tel]
                                }
                          );
但请看下面克里斯·辛克莱的评论


但是请参见下面Chris Sinclair的评论

您应该能够使用类似这样的部分类来扩展MyNew:

public partial class MyNew
{
    public int Tel { get; set; }
}

Tel将像任何其他属性一样可用。

您应该能够使用如下部分类扩展MyNew:

public partial class MyNew
{
    public int Tel { get; set; }
}

Tel将像任何其他属性一样可用。

您可以将其作为名为Tel的扩展方法添加到MyNew中?不幸的是,没有扩展属性。MyNew类是否被密封,好像它不是。您可能可以从类继承添加您需要的任何属性。您是否希望此属性在编译时可用,以便您可以在C代码中引用它,或者它仅参与运行时内容?您可以将其添加为名为Tel的扩展方法也许是为了我的新朋友?不幸的是,没有扩展属性。MyNew类是否被密封,好像它不是。您可能可以从类继承添加您需要的任何属性。您是否希望此属性在编译时可用,以便您可以在C代码中引用它,或者它只参与运行时内容?假设News是IEnumerable,强制转换将失败,因为它们实际上不是子类类型的对象。我不知道强制转换是如此棘手,强制转换的行为在.NET 3.5和.NET 3.5 SP1之间发生了更改—只需将其视为对子类的文字类型强制转换即可。即使存在显式/隐式转换,它也不会执行任何转换。但是由于MyNewExtended扩展了MyNew,所以假设News是IEnumerable,您无论如何都无法编写用户定义的转换,强制转换将失败,因为它们实际上不是子类类型的对象。我不知道强制转换是如此棘手,强制转换的行为在.NET 3.5和.NET 3.5 SP1之间发生了更改—只需将其视为对子类的文字类型强制转换即可。即使存在显式/隐式转换,它也不会执行任何转换。但是,由于MyNewExtended扩展了MyNew,因此您无论如何都无法编写用户定义的转换。不能使用partial,因为该类已在另一个DLL中编译。partial只是跨文件拆分类的一种方法。首先,课堂必须是局部的。-1 Vaze重新阅读OP如何在他的问题中解释他的问题。部分课程没用,对不起。你说得对。我没有看到它来自另一个DLL。无法使用partial,因为该类已在另一个DLL中编译。partial只是一种跨文件拆分类的方法。首先,课堂必须是局部的。-1 Vaze重新阅读OP如何在他的问题中解释他的问题。部分课程没用,对不起。你说得对。我没有看到它来自另一个DLL。