小编Mit*_*nca的帖子

更改List <T>中的一些值

我有一些列表(其中T是自定义类,类有一些属性).我想知道如何使用Lambda表达式更改其中的一个或多个值,因此结果将与下面的foreach循环相同:

注意:列表中包含多个项目(多行)

        foreach (MyClass mc in list)  
        {
            if (mc.Name == "height")
                mc.Value = 30;
        }
Run Code Online (Sandbox Code Playgroud)

这是linq查询(使用Lambda表达式),但它与上部foreach循环不同,它只返回列表中的1个项目(一行)!

我想要的是,它返回所有项目(所有行),并且只返回适当的项目(WHERE扩展方法中指定的项目).

list = list.Where(w => w.Name == "height").Select(s => { s.Value = 30; return s; }).ToList();
Run Code Online (Sandbox Code Playgroud)

注意:这两个例子不一样!我再说一遍,linq只返回1项(一行),这是我不想要的东西,我也需要列表中的所有项目(比如foreach循环,它只做更改,但它不会删除任何项目).

c# linq lambda expression

49
推荐指数
3
解决办法
15万
查看次数

例外:参数无效(将新图像传递给pictureBox时)

我已经在PictureBox控件中有一个图像,现在我想传递一个新的图像.

会发生什么,是allpication Disposes(我捕获异常:"参数无效").

这是我的代码:

            using (Image img = Image.FromFile(open.FileName))
            {
                part.Picture = img;
                pictureBox1.InitialImage = null;
                pictureBox1.Image = img;
            }    
Run Code Online (Sandbox Code Playgroud)

因此,当代码退出该方法时,它会直接显示为此主表单的Displose.我只在Form1启动的行上捕获异常.在这个问题上,没有什么可以解除的.当pictureBox正在绘画时(在Paint事件中),它一定是错误的,但我并没有被它所吸引.

我真的不知道如何解决这个问题.我甚至试图用来清除所有资源(通过调用垃圾收集),但似乎没有任何工作.


还有一件事:"part"是List的引用,所以当我尝试删除当前图像(用新图像替换它)时,我得到了另一个例外,例如:

"进程无法访问该文件,因为它正被另一个进程使用".


这是否与第一个异常有关(当新图像未在pictureBox中绘制时)?

c# dispose image

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

反序列化异常:无法找到程序集

我正在序列化一些数据,如字段和自定义类,以创建二进制数据(字节数组).

然后我想Deserialize从二进制数据回到字段和类.

但我得到一个例外.如果这两种方法在同一个程序集中发生,那么一切正常 - 但事实并非如此.

我在一个assambly中进行序列化,并在另一个中进行反序列化.这也是令人兴奋的说法: Unable to find assembly 'MyAssamblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

注1:我没有将字段恢复的问题,只有类导致它们.

注2:我在两个程序集中都有相同的类.

c# sockets serialization deserialization

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

Binding DataGridView to List <T>不显示数据

这是我的代码(这是一个非常简单的例子):

public partial class Form1 : Form
{
    List<Person> listPersons;
    public Form1()
    {
        InitializeComponent();
        listPersons = new List<Person>();
        dataGridView1.DataSource = listPersons;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text.Length > 0)
        {
            Person p = new Person();
            p.Name = textBox1.Text;
            listPersons.Add(p);
        }
    }
}

class Person
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当您按下按钮时,数据IS将添加到列表中,但不会显示在列表中DataGridView.我错过了什么?

我曾尝试设置AutoGenerateColumnsVirtualModetrue,但它还是不解决问题.

c# generics datasource list winforms

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

Lambda表达式 - 选择运算符

我想知道如何编写Linq(使用标准点表示法中的lambda表达式)查询.我有一些名字的数组,我想根据一个声明retrevie一个新的名字数组.这是:对名称数组进行排序,并从名称上返回一个新列表,该名称以某个特定字母(比如字母M)开头.

这是我目前的数组:

string[] arrNames = { "Mike", "Zach", "Ella", "Allan", "Jo", "Roger", "Tito" };
Run Code Online (Sandbox Code Playgroud)

我想回复这样的名字:Mike,Roger,Tito,Zach - 这4个; 其他3个名字(Allan,Ella和Jo是以字母顺序字母"M"开头的字母开头的名字.这与使用运算符"StartsWith"不同.这个只选择在特定字母上开头的名字信.我想获得所有这一切都在从信字母顺序排列的(这样的名字开始从M到Z)的名字.

因此,带有名称的重新列表以字母"M"开头或以字母顺序查看.

米蒂亚

c# linq linq-to-objects

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

BinaryWriter 问题 - “代码在 Write() 方法之间添加一些字节”

我尝试使用 BinaryWriter 然后使用 BinaryReader 编写一些代码。当我想写时,我使用 Write() 方法。但问题是,在 Write 方法的两行之间出现了一个新字节,该字节在 ASCII 表中为十进制 31(sometines 24)。你可以在这张图片上看到它:

在此输入图像描述

您可以看到索引 4 处的字节(第 5 个字节)的 ASCII 十进制值是 31。我没有在那里插入它。正如您所看到的,第一个 4 个字节是为数字(Int32)保留的,接下来是其他数据(主要是一些文本 - 现在这并不重要)。

正如您从我编写的代码中看到的: - 在第一行输入数字 10 - 在第二行文本“这是一些文本...”

第 5 个字节(12 月 31 日)是怎么出现在中间的?

这是我的代码:

static void Main(string[] args)
    {           
        //
        //// SEND - RECEIVE:
        //
        SendingData();
        Console.ReadLine();
    }

    private static void SendingData()
    {
        int[] commandNumbers = { 1, 5, 10 }; //10 is for the users (when they send some text)!

        for (int i …
Run Code Online (Sandbox Code Playgroud)

c# yield-return binaryreader binarywriter

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

方法返回类型 list&lt;string&gt; 还是泛型方法?

我希望该方法具有特定的返回类型,但不知何故我无法使其工作。

我有一个 XML 结构:

<Notifications>
   <Alerts>
      <Max>3<Max/>
      <Med>2<Med/>
      <Min>1<Min/>
   </Alerts>
</Notifications>
Run Code Online (Sandbox Code Playgroud)

我想得到Max, Med,的值Min。但要点是我根本不需要任何 foreach 循环,我只希望该方法具有 List<string> 返回类型,或者更好地创建通用返回类型。

关键是,我没有任何自定义类(而且我不想拥有它)来填充其属性。

这是我到目前为止所知道的,但我在“List()”匿名方法上遇到了错误:

Here it returns:
List<string> items = GetAlerts();

//method to read:
public List<string> GetAlerts()
{
    return xmlDoc1.Descendants("Notifications").Elements("Alerts").Select(s => new
    {
        MAX = s.Element("Max").Value,
        MED = s.Element("Med").Value,
        MIN = s.Element("Min").Value
     }).ToList(); //error on this line
}
Run Code Online (Sandbox Code Playgroud)

----------


如果这个方法是一个泛型返回类型,看起来会怎么样?这是不行的:

Here it returns: 
List<object> items = setBLL2.GetAlert<List<object>>();

public T GetAlert<T>() where T:class
{
    return (T)xmlDoc1.Descendants("Notifications").Elements("Alerts").Select(s => new
    //ERROR up here …
Run Code Online (Sandbox Code Playgroud)

c# xml generics

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