我怎么能转换DataTable的IEnumerable<dynamicObject>?
例如,我想转换任何 DataTable
ID | Name DI | emaN
--------- or ---------
1 | x 2 | x
2 | y 1 | y
Run Code Online (Sandbox Code Playgroud)
在对象列表中
// list 1 (ex 1) // list 2 (ex 2)
{ {
{ ID = 1, Name = "x" } { DI = 2, emaN = "x" }
{ ID = 2, Name = "y" } { DI = 1, emaN = "y" }
} }
Run Code Online (Sandbox Code Playgroud)
所以
list1.First().ID // 1 …Run Code Online (Sandbox Code Playgroud) 我有一个PagedModel类,它实现IEnumerable只返回ModelData,忽略分页数据.我还重写了Equals和GetHashCode,以允许比较两个PagedModel对象的ModelData,PageNumber和TotalPages以及PageSize.
这是问题所在
Dim p1 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
Dim p2 As New PagedModel() With {
.PageNumber = 1,
.PageSize = 10,
.TotalPages = 10,
.ModelData = GetModelData()
}
p1.Equals(p2) =====> True
Assert.AreEqual(p1, p2) ======> False!
Run Code Online (Sandbox Code Playgroud)
看起来NUnit调用它的内部EnumerableEqual方法来比较我的PagedModel而不是使用我提供的Equals方法!有没有办法覆盖这种行为,或者我是否必须编写自定义断言.
嗨,假设这两种方法:
private List<IObjectProvider> GetProviderForType(Type type)
{
List<IObjectProvider> returnValue = new List<IObjectProvider>();
foreach (KeyValuePair<Type, IObjectProvider> provider in _objectProviders)
{
if ((provider.Key.IsAssignableFrom(type) ||
type.IsAssignableFrom(provider.Key)) &&
provider.Value.SupportsType(type))
{
returnValue.Add(provider.Value);
}
}
return returnValue;
}
private IEnumerable<IObjectProvider> GetProviderForType1(Type type)
{
foreach (KeyValuePair<Type, IObjectProvider> provider in _objectProviders)
if ((provider.Key.IsAssignableFrom(type) ||
type.IsAssignableFrom(provider.Key)) &&
provider.Value.SupportsType(type))
yield return provider.Value;
}
Run Code Online (Sandbox Code Playgroud)
哪一个更快?当我查看第一种方法时,我看到内存是为List分配的,我认为不需要它.该IEnumerable的方法似乎要快给我.
例如,假设你打电话
int a = GetProviderForType(myType).Count;
int b = GetProviderForType1(myType).Count();
Run Code Online (Sandbox Code Playgroud)
现在,另一个问题是,这两个之间是否有性能差异?
你怎么看?
是否有更好的方法来获取IEnumerable类型的第一个元素:
foreach (Image image in imgList)
{
picture.Width = (short)image.Columns;
picture.Height = (short)image.Rows;
break;
}
Run Code Online (Sandbox Code Playgroud)
这是类型的确切声明:
public class ImageList : IEnumerable, IDisposable
Run Code Online (Sandbox Code Playgroud) 鉴于以下类型
public class SomeValue
{
public int Id { get; set; }
public int Value { get; set; }
}
public class SomeModel
{
public string SomeProp1 { get; set; }
public string SomeProp2 { get; set; }
public IEnumerable<SomeValue> MyData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想创建该类型的编辑形式,SomeModel这将包含常规的文本字段SomeProp1,并SomeProp2再将装有一个文本字段,每个表SomeValue中SomeModel.MyData收集.
这是怎么做到的?如何将值绑定回模型?
我目前有一个表单显示每个值的文本字段,但它们都具有相同的名称和相同的ID.这显然不是有效的HTML,并且会阻止MVC将值映射回来.
我有类foo的例子,我想把它作为IEnumerable返回.我可以在不创建新列表的情况下执行此操作.
也许类似如下:
IEnumerable<foo>.fromInstance(foo)
Run Code Online (Sandbox Code Playgroud) C#是否提供了一种很好的方法来将单个实体类型转换T为IEnumerable<T>?
我能想到的唯一方法是:
T entity = new T();
IEnumerable<T> = new List { entity }.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)
我想应该有更好的方法.
@Html.CheckBox("orderNumbers", new { value = 1 })
@Html.CheckBox("orderNumbers", new { value = 2 })
@Html.CheckBox("orderNumbers", new { value = 3 })
@Html.CheckBox("orderNumbers", new { value = 4 })
@Html.CheckBox("orderNumbers", new { value = 5 })
[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<int> orderNumbers) { }
[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<string> orderNumbers) { }
Run Code Online (Sandbox Code Playgroud)
如果我在我的动作方法中使用第一个签名,我会得到一个空的IEnumerable.
如果我使用第二个签名,我确实收到了值,但我也收到了未选择值的假值(因为MVCs模式阴影所有复选框都带有隐藏字段).
我会收到类似的东西 orderNumbers = { "1", "2", "false", "4", "false" }
为什么我不能得到数字列表?
我希望我的类型能够实现IEnumerable<string>.我尝试在Nutshell中关注C#,但出了点问题:
public class Simulation : IEnumerable<string>
{
private IEnumerable<string> Events()
{
yield return "a";
yield return "b";
}
public IEnumerator<string> GetEnumerator()
{
return Events().GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了构建错误
错误1'EventSimulator.Simulation'未实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.'EventSimulator.Simulation.GetEnumerator()'无法实现'System.Collections.IEnumerable.GetEnumerator()',因为它没有匹配的返回类型'System.Collections.IEnumerator'.
我有这个简单的类与2个枚举字段,我试图在集合(List<T>)中找到此对象的一个项目,但Contains方法无法正常工作
public class Calculator : IEqualityComparer<Calculator>
{
public DashboardsComputationMode ComputationMode { get; set; }
public Modes Mode { get; set; }
public Calculator(DashboardsComputationMode dashboardsComputationMode, Modes mode)
{
ComputationMode = dashboardsComputationMode;
Mode = mode;
}
public bool Equals(Calculator x, Calculator y)
{
return (x.ComputationMode.Equals(y.ComputationMode) && x.Mode.Equals(y.Mode));
}
public int GetHashCode(Calculator obj)
{
return obj.ComputationMode.GetHashCode() ^ obj.Mode.GetHashCode();
}
}
public enum DashboardsComputationMode
{
Weighted = 0,
Aggregated = 1,
PR = 2,
CurrentValue = 3,
EquivalentHours = 4,
AggregatedCorrected = …Run Code Online (Sandbox Code Playgroud) ienumerable ×10
c# ×7
.net ×2
.net-4.0 ×1
asp.net-mvc ×1
assert ×1
casting ×1
checkbox ×1
datatable ×1
dynamic ×1
generics ×1
html-lists ×1
int ×1
list ×1
nunit ×1
performance ×1