Ice*_*ind 1 c# linq vb.net ienumerable
伙计们,我正在尝试将某些东西从C#转换为VB.NET,而我在查找VB.NET与C#的yield关键字方面存在差异.我意识到'yield'不是VB.NET的可转换关键字,所以有人可以告诉我如何在VB.NET中实现这个代码.除了实现的GetEnumerator()函数之外,我将其全部转换过来.它只是一个实现CollectionBase和IEnumerable的类(使LINQ值得):
[Serializable()]
public partial class Customers : CollectionBase, System.Collections.Generic.IEnumerable<BusinessLayer.Customer>
{
public new System.Collections.Generic.IEnumerator<BusinessLayer.Customer> GetEnumerator()
{
foreach (BusinessLayer.Customer Cust in this.List)
{
yield return Cust;
}
}
public Customers()
{
}
public Customers(DataRowCollection datarows) : this()
{
this.Load(datarows);
}
protected void Load(DataRowCollection dataRows)
{
foreach (DataRow dr in dataRows) {
this.Add(new Customer(dr));
}
}
public Customer this[int index] {
get { return (Customer)base.InnerList[index]; }
set { base.InnerList[index] = value; }
}
public int Add(Customer val)
{
return base.InnerList.Add(val);
}
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
由于您无法使用该yield关键字,因此您必须采用GetEnumerator()其他方式.你可以做的是返回Listfrom 的枚举器CollectionBase.但是,因为这是一个IList而不是一个IList<T>,你必须强制转换它(你可以使用Cast<T>()Linq 的扩展方法).然后你的C#代码变为:
public IEnumerator<BusinessLayer.Customer> GetEnumerator()
{
return InnerList.Cast<BusinessLayer.Customer>().GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
这给出了相同的结果,但行为略有不同(关于不再使用延迟执行yield).
在VB.Net中,GetEnumerator()将是:
Public Function GetEnumerator() As IEnumerator(Of BusinessLayer.Customer)
Return InnerList.Cast(Of BusinessLayer.Customer)().GetEnumerator()
End Function
Run Code Online (Sandbox Code Playgroud)
其余代码应直接转换为VB.Net.
| 归档时间: |
|
| 查看次数: |
1525 次 |
| 最近记录: |