相关疑难解决方法(0)

如何在迭代时从通用列表中删除元素?

我正在寻找一个更好的模式来处理每个需要处理的元素列表,然后根据结果从列表中删除.

你不能.Remove(element)在里面使用foreach (var element in X)(因为它导致Collection was modified; enumeration operation may not execute.异常)...你也不能使用for (int i = 0; i < elements.Count(); i++),.RemoveAt(i)因为它会扰乱你在集合中的当前位置i.

有一种优雅的方式来做到这一点?

c# generics loops list key-value

418
推荐指数
15
解决办法
35万
查看次数

奇怪的是,IEnumerable.ToList()创建了全新的对象

我知道IEnumerable.ToList()应该创建一个新的List,但是项目指向IEnumerable中的相同原始项,如ToList()所述 - 它是否创建一个新列表?

但是,我使用VS 2012的代码得到了一些奇怪的行为; WPF; 和.NET 4.0.它开始于IEnumerable.SequenceEquals()似乎没有像我预期的那样工作.我在我的QuickWatch对话框中挖掘,令人难以置信的是,以下语句的计算结果为false:

this.Items.First () == this.Items.ToList ()[ 0 ]
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过:

this.Items.ToList ().IndexOf(this.Items.First ())
Run Code Online (Sandbox Code Playgroud)

评价为-1.

Items 在WPF自定义控件上声明为属性,如下所示:

public static readonly DependencyProperty ItemsProperty = DependencyProperty.Register (
        "Items", 
        typeof ( IEnumerable<UserLayoutType> ), 
        typeof ( UserLayoutSelectorControl ),
        new FrameworkPropertyMetadata ( null, FrameworkPropertyMetadataOptions.AffectsRender, UserLayoutSelectorControl.PropertyChanged ) );


public IEnumerable<UserLayoutType> Items
{
    get
    {
        return ( IEnumerable<UserLayoutType> ) this.GetValue ( UserLayoutSelectorControl.ItemsProperty );
    }
    set
    {    
        this.SetValue ( UserLayoutSelectorControl.ItemsProperty, value );                
    }
}
Run Code Online (Sandbox Code Playgroud)

UserLayoutType只是XSD工具生成的类,具有以下声明:

// 
// This source code was auto-generated …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable list .net-4.0

9
推荐指数
1
解决办法
1862
查看次数

从现有实例创建IList <T>的新实例并进行修改

鉴于以下代码:

public class Item
{
    private int _id;
    private int _order;
    private string _name;

    public int Id
    {
        get { return _id; }
        set { _id = value; }
    }

    public int Order
    {
        get { return _order; }
        set { _order = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public static IList<Item> InitList1()
    {
        var list = new List<Item>
        {
            new Item { Id = 1, Order …
Run Code Online (Sandbox Code Playgroud)

.net c# ienumerable ilist

6
推荐指数
1
解决办法
3万
查看次数

Dapper结果为json(使用fastjson)

=====更新时间2016年8月20日=====

最新版本的fastjson现在可以Dictionary<string, ?>正确处理类型,我的问题现在解决了.

=============================

我正在使用fastjson来序列化来自Dapper的查询结果,DB中的表具有如下数据:

id | name | price
1  | x    | 100
2  | y    | 200
....
Run Code Online (Sandbox Code Playgroud)

当我

using Dapper;
using fastJSON;
// ....
JSON.Parameters.KVStyleStringDictionary = false;
// ....
result = JSON.toJSON(conn.Query("SELECT * FROM tableX"));
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

[{"id":1,"name":"x","price":100},{"id":2,"name":"y","price":200},...]
Run Code Online (Sandbox Code Playgroud)

但实际结果输出:

[[{"Key":"id","Value":1},{"Key":"name","Value":"x"},{"Key":"price","Value":100}],
[{"Key":"id","Value":2},{"Key":"name","Value":"y"},{"Key":"price","Value":200}]...]
Run Code Online (Sandbox Code Playgroud)

生成了许多看起来多余的键值对.

有没有办法得到正确的结果?

或者我应该切换到另一个JSON序列化程序?

==========更新==========

makubex88的答案表明我可以创建一个映射表的自定义类,并使用它conn.Query<myClass>来获取正确的json,虽然它适用于这种情况,看起来我必须为DB中的每个表创建数百个类才能获得理想的json结果,对我来说确实很累人.(谢谢你:P)

任何替代解决方案将受到高度赞赏!

.net c# json dapper fastjson

5
推荐指数
1
解决办法
5871
查看次数

如果输入已经是列表,则ToList不会快捷方式

ToReadOnlyCollection扩展方法与快捷语句直接返回输入,如果它已经ReadOnlyCollection的一个实例来实现.该ToList扩展方法未启用.

纯粹出于好奇,是否有一个特殊的原因,或者只是一些没有实施的事情.我可以看到为什么保证ToList始终返回一个新实例可能是有用的,但id有兴趣知道是否有任何其他原因.

c# linq

3
推荐指数
1
解决办法
315
查看次数

将多个ComboBox绑定到单个列表 - 问题:当我选择项目时,所有组合框都会更改

我正在ComboBox动态创建一个数组,而DataSourcefor all ComboBox是一个包含一些整数的整数列表.但是当我在任何一个组合框中更改值X时,所有其他组合值都会重置为值X.

c# combobox winforms

3
推荐指数
1
解决办法
1286
查看次数

Linq-Query是否被称为toList()生成包含元素的副本?

我遇到了一个(对我而言)奇怪的行为.这是代码:

var objects = from i in items
              //some calculations
              select something;

// other calculations

objects.ToList().ForEach(x => {
    //some calculations
    x.Property = "some text"
});

return objects;
Run Code Online (Sandbox Code Playgroud)

首先我生成一个IEnumerable,它是对db的查询,我跳过了细节.然后我必须做其他计算,最后我迭代我的对象来设置另一个参数.运行此代码,一旦IEnumerable返回对象,Property就不会设置它们.

否则,如果我ToList()按照后面的Linq表达式移动,Property则设置为:

var objects = (from i in items
              //some calculations
              select something).ToList();

// other calculations

objects.ForEach(x => {
    //some calculations
    x.Property = "some text"
});

return objects;
Run Code Online (Sandbox Code Playgroud)

据我所知,对象没有复制,但被引用......对吗?显然代码背后会发生什么?有什么不同?

c# linq tolist

3
推荐指数
1
解决办法
823
查看次数

tasks.ToList()是否创建包含新复制任务的列表,或列表是否指向相同的任务?

假设我们有一系列任务(称为"任务"),然后将其转换为列表(称为"temp"),方法是:

var temp = tasks.ToList();
Run Code Online (Sandbox Code Playgroud)

运行数组元素指向的任务会发生什么?我们是否分别运行两组任务(一组在'tasks'中,另一组在'temp'中)?或者他们指向相同的任务?

以下代码(摘自考试参考文献70-483)与我所说的(最后三行)相关:

Task<int>[] tasks = new Task<int>[3];

tasks[0] = Task.Run(() => { Thread.Sleep(2000); return 1; });
tasks[1] = Task.Run(() => { Thread.Sleep(1000); return 2; });
tasks[2] = Task.Run(() => { Thread.Sleep(3000); return 3; });

while (tasks.Length > 0) {
    int i = Task.WaitAny(tasks);
    Task<int> completedTask = tasks[i];

    Console.WriteLine(completedTask.Result);

    var temp = tasks.ToList();
    temp.RemoveAt(i);
    tasks = temp.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

更新:我知道最后三行的目的但不知道它为什么起作用.

.net c# task-parallel-library

2
推荐指数
1
解决办法
552
查看次数

如何更新集合类型对象中的值

我创建了一个类的列表对象,然后更新它的值,它的值不更新请帮助我这里是我的代码

public class LocationData
{
    public int LocId { get; set; }
    public string LocatinName { get; set; }
    public int ControlCount { get; set; }
    public Nullable<short> KeyType { get; set; }
    public Nullable<short> Financial_Reporting { get; set; }
    public Nullable<short> FraudRisk { get; set; }
    public Nullable<short> FinancialControl { get; set; }
    public Nullable<short> ELC { get; set; }
}

 var locList = location.Select(a =>
               new LocationData { LocatinName = a.Location, LocId = a.LocID });
Run Code Online (Sandbox Code Playgroud)

之后,我正在尝试更新此值:

locList.Where(a => …
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
302
查看次数

List.Clear()清除我不希望它的列表

我想知道为什么我的templist.clear()方法清除了我添加到ManhattanDistance词典中的列表.

在这方面的任何帮助将不胜感激,这是我一直在努力的数据挖掘项目的一部分.我必须使用k最近邻法来估算缺失值.

public void CalculateManhattanDistance(Dictionary<int, List<string>> MissingList, Dictionary<int, List<string>> OtherList)
{
    Dictionary<int,Array> MissingListNeighbours = new Dictionary<int,Array>();
    Dictionary<int, List<int>> ManhattanDistanceList = new Dictionary<int,List<int>>();
    List<int> tempList = new List<int>();

    int total=0;
    int k=0;

    try
    {
        for (int i = 0; i < MissingList.Count(); i++)
        {
            for (int j = 0; j < OtherList.Count(); j++)
            {
                for (k = 0; k < MissingList[0].ToArray().Length; k++)
                {
                    if (Convert.ToChar(MissingList[i][k].ToString()) == '?')
                        continue;
                    else
                        total += Math.Abs(Convert.ToInt32(MissingList[i][k].ToString()) - Convert.ToInt32(OtherList[j][k].ToString()));
                }
                tempList.Add(total);

                total …
Run Code Online (Sandbox Code Playgroud)

.net c#

0
推荐指数
1
解决办法
151
查看次数