Rui*_*ins 0 c# ienumerator foreach list
我有一个名单Dars
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PantaRei.Components
{
public class Dars
{
public float OpBal { get; set; }
public float PlNeOrRec { get; set; }
public float MiCaCol { get; set; }
public float MiDeCol { get; set; }
public float MiWrOff { get; set; }
public float ClBal { get; set; }
public float Tot
{
get { return OpBal+ PlNeOrRec+ MiCaCol + MiDeCol + MiWrOff; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
我创造了一个新的dars
Dars secA1 = new Dars();
Run Code Online (Sandbox Code Playgroud)
然后我用这段代码来填补它
public static void GetData(ref Dars secA1, Ddr ddr, Ddrs ddrs, Type pTypes)
{
Array typesEnum = Enum.GetValues(pTypes);
foreach (Enum types in typesEnum)
{
string pType = StringEnum.GetStringValue(types);
secA1.OpBal = ddrs.Out.Sum(o => o.Amount);
secA1.MiDeCol += ddr.Dil.Where(dil => dil.ProductType == pType && dil.ToBeSold).Sum(dil => dil.Amount);
secA1.PlNeOrRec += ddr.Rec.Where(rec => rec.ToBeSold).Sum(rec => rec.Amount);
GetMiCaCol(ref secA1, ddr, pType);
GetMiWrOff(ref secA1, ddr, pType);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想做这样的事情
int i = 11;
foreach (float g in secA1)
{
daily.Cells[i, 4] = g;
i++;
}
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误
foreach语句不能对'PantaRei.Components.Dars'类型的变量进行操作,因为'PantaRei.Components.Dars'不包含'GetEnumerator'的公共定义
我该如何解决这个问题?
Dan*_*Dan 10
仅仅因为一个类具有恰好是floats 的属性集合,它就不会使它成为集合.您的代码似乎正在通过某种数据绑定进行更适当的操作.您尝试执行的操作可以通过标记Dars为实现IEnumerable接口,并添加GetEnumerator方法的实现来返回类中的float属性的值,但我绝不会在代码审查中宽恕这种方法.话虽这么说,试试这个(如果你必须):
public class Dars : IEnumerable
{
public float OpBal { get; set; }
public float PlNeOrRec { get; set; }
public float MiCaCol { get; set; }
public float MiDeCol { get; set; }
public float MiWrOff { get; set; }
public float ClBal { get; set; }
public float Tot
{
get { return OpBal + PlNeOrRec + MiCaCol + MiDeCol + MiWrOff; }
}
public IEnumerator GetEnumerator()
{
yield return this.OpBal;
yield return this.PlNeOrRec;
yield return this.MiCaCol;
yield return this.MiDeCol;
yield return this.MiWrOff;
yield return this.ClBal;
yield return this.Tot;
}
}
Run Code Online (Sandbox Code Playgroud)
目前还不完全清楚你要做什么,但是你可能想要实现一个返回IEnumerable<float>使用迭代器块的方法:
public class Dars
{
public float OpBal { get; set; }
public float PlNeOrRec { get; set; }
public float MiCaCol { get; set; }
public float MiDeCol { get; set; }
public float MiWrOff { get; set; }
public float ClBal { get; set; }
public IEnumerable<float> GetValues()
{
yield return OpBal;
yield return PlNeOrRec;
yield return MiCaCol;
yield return MiDeCol;
yield return MiWrOff;
yield return ClBal;
}
public float Tot
{
get { return OpBal+ PlNeOrRec+ MiCaCol + MiDeCol + MiWrOff; }
}
}
Run Code Online (Sandbox Code Playgroud)
...或者您可以创建一个List<float>或一个float[]并从该方法返回:
public IEnumerable<float> GetValues()
{
return new[] { OpBal, PlNeOrRec, MiCaCol, MiDeCol, MiWrOff, ClBal };
}
Run Code Online (Sandbox Code Playgroud)
当然,如果那不是你想要的,你应该调整订单.
(顺便说一句,这些都是非常可怕的属性名称.它们真的是你的代码所暴露的吗?)
| 归档时间: |
|
| 查看次数: |
14891 次 |
| 最近记录: |