这是一种方法,应该将已分配的用户从列表中取出,并将未分配的用户保留在列表中.GuidList在按钮点击时添加了userId.profileList用于填充gridView.
这是代码:
private VList<VW_profiles> FilterAssigned(VList<VW_profiles> profileList)
{
VList<VW_profiles> sortedList = new VList<VW_profiles>();
foreach(VW_profiles profile in profileList)
{
if(GuidList.Count > 0)
{
foreach(Guid userId in GuidList)
{
if(profile.UserId != userId)
{
sortedList.Add(profile)
}
}
}
else
{
sortedList = profileList;
}
}
return sortedList;
}
Run Code Online (Sandbox Code Playgroud)
现在这是我的问题.Everythings似乎工作得很好,直到profileList中的所有项目也被添加到GuidList中.然后我们不再对两个Guid ID进行否定,而是再次开始添加所有人.有没有人有任何关于如何做到这一点的建议是一种更有效的方法,并且一旦我们把所有事情都拿出来就避免加入.
谢谢!
我已经使用了BackgroundWorkers了,但我以前从未遇到过这个问题.我的程序分析逻辑分析仪的输出,产生数据包,其中有数千个.为了防止更新延迟更新我的表单中的ListView(我之前报告了每个发现的,并且表单完全没有响应)我正在收集通用列表(List <Packet>)中的BackgroundWorker内的数据包和然后报告当找到n量(当前为250),或者发生异常时,或者当它完成时.
当我在List <Packet>上进行迭代时,问题发生在我的回调中,我得到一个InvalidOperationException,其中包含"Collection was modified"错误.我没有触及foreach中的集合(我正在添加到另一个集合中,但我认为没有理由可以修改我正在迭代的集合 - 再加上评论它不能解决问题.)我是甚至尝试锁定e.UserState,将e.UserState存储到本地作用域List <Packet>并锁定,似乎没有任何作用.
这是我的回调方法的代码:
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
packetsListView.SuspendLayout();
lock ((List<Packet>)e.UserState)
{
foreach (Packet packet in (List<Packet>)e.UserState)
{
packets.Add(packet);
ListViewItem item = new ListViewItem(string.Format("{0}ns", Math.Round(packet.StartSampleNumber * 41.666667)));
item.Tag = packet;
item.SubItems.Add(new ListViewItem.ListViewSubItem(item, packet.Description));
packetsListView.Items.Add(item);
}
}
packetsListView.ResumeLayout();
statusLabel.Text = string.Format("Analyzing...found {0} {1}", packetsListView.Items.Count, packetsListView.Items.Count == 1 ? "packet" : "packets");
}
Run Code Online (Sandbox Code Playgroud) 我在WinForms中,在保存对DataBase的更改之前,我必须检查使用的ErrorProvider是否为任何显示的控件保留错误.
我想出了几种方法可以做到这一点:
一个简单的foreach循环在ControlContainer上:
foreach (Control c in ctrlcontainer)
{
if (epOrderHeader.GetError(c) != string.Empty)
{
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)使用List扩展方法Exists(谓词):
return(ctrlcontainer.Exists(c => epOrderHeader.GetError(c)!= string.Empty);
从胃口开始,我预计第二个是最快的,但是使用我发现的Eqatec Profiler,foreach循环稍微快一些(在我的情况下大约1ms).虽然这是微不足道的,但我仍然想知道为什么会这样?
编译器如何翻译这些方法,为什么第一个更快?
我一直在搜索stackoverflow上的1000个NullPointerException帖子,并且在我的生活中不能说明为什么会发生这种情况; 除了明显的(它是空的).有人可以帮助我理解我不理解Generic Singly LinkedList导致我得到这个运行时错误的内容.
这是我的代码:
import java.io.*;
import java.util.*;
public class GList<T> {
private GNode<T> head;
private GNode<T> cursor;
private static class GNode<E>{
private E data; //NULLPOINTEREXCEPTION
private GNode<E> next;
public GNode(E data, GNode<E> next) {
this.data = data;
this.next = next;
}
}
public static class InnerList<E> {
private String name;
private GList<Integer> inner = new GList<Integer>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public GList<Integer> getInner() {
return inner; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用DataTable填充List,我为每个循环检查每一行并将该项添加到列表中.但代码不起作用,我不断收到错误..
System.NullReferenceException:{"对象引用未设置为对象的实例."}
-Data:{System.Collections.ListDictionaryInternal}
-HelpLink:Nothing -Inner Exception:Nothing
-TargetSite:{System.Collections.Generic.List`1 [System.String] getListOfUsers()}
这是我的代码......
Function getListOfUsers() As List(Of String)
'Dim i As Integer = 0
Dim lUserNames As List(Of String) = Nothing
Dim dt As DataTable = getDataTable(db_Config, "SELECT * FROM tblUsers")
If dt.Rows.Count > 0 Then
Try
For Each dRowItem As DataRow In dt.Rows
'i = i + 1
'If IsDBNull(dt.Rows(0)("fldUserName").ToString) = False Then
' lUserNames.Add(dt.Rows(0)("fldUserName").ToString)
'End If
If dRowItem.Item("fldUserName").ToString <> "" Then
lUserNames.Add(dRowItem.Item("fldUserName").ToString)
End If
Next dRowItem
Catch ex As Exception
MsgBox(ex.ToString) …Run Code Online (Sandbox Code Playgroud) 如何比较这两个通用列表并根据ID获取匹配数据
List<int> _GetRecCust;
List<Tranobject> GetTransDeta;
Run Code Online (Sandbox Code Playgroud)
我试过了
var TransactionsToProcess = GetTransDeta.Where(x => _GetRecCust.Contains(Convert.ToInt32(x.ID)));
Run Code Online (Sandbox Code Playgroud)
但无法获得comman ID数据.
两者都有ID一个领域.
提前致谢
我试图查询(通过LINQ)一个通用列表,它正在"行动",好像我"在哪里"的某些字段不存在.
这是代码:
private decimal GetPriceForMember_Code_Desc_Unit_Week(string member, string itemcode, string desc, string unit, int weeknum)
{
Decimal price = 0.00M;
if (unit == CRAFTWORKS_SC)
{
price = craftworksWeek1PVDSubsetList.Select(x => x.Price)
.Where(x => x.ShortName.Equals(member))
.Where(x => x.Description.Equals(desc))
.Where(x => x.WeekNum.Equals(weeknum))
.Where(x => x.ItemCode.Equals(itemcode));
}
//else if (unit == CHOPHOUSE) TODO: Finish
return price;
}
Run Code Online (Sandbox Code Playgroud)
它失败了," 'string'不包含'ShortName'的定义,并且没有扩展方法'ShortName'接受类型'string'的第一个参数可以找到(你是否缺少using指令或汇编引用?) "
我的LINQ语法显然有问题,但我不知道是什么.代码中的泛型列表定义和声明如下:
public class PriceVarianceSubsetData
{
public String ShortName { get; set; }
public String ItemCode { get; set; }
public String Description { get; set; …Run Code Online (Sandbox Code Playgroud) 我有一个自定义类型的通用列表,我试图找回一个类型的实例.我已尝试使用两个条件"FirstOrDefault"和"Where",但两个条件都给我相同的错误信息("运算符'&&'不能应用于'lambda表达式'的操作数'和'lambda表达'")
他们来了:
// FirstOrDefault
UnitItemCodeItemID uicii =
unitItemCodeItemIDList
.FirstOrDefault((u => u.Unit == _unit) && (d => d.Description == desc));
// Where
UnitItemCodeItemID uicii =
unitItemCodeItemIDList
.Where((u => u.Unit == _unit) && (d => d.Description == desc));
Run Code Online (Sandbox Code Playgroud)
我不知道它是否相关,但课程是:
public class UnitItemCodeItemID
{
public string Unit { get; set; }
public string Description { get; set; }
public string ItemCode { get; set; }
public int ItemID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)