小编Dmi*_*try的帖子

如何删除添加到List中的最后一个元素?

我在c#中有一个List,我在其中添加列表字段.现在添加i时必须检查条件,如果条件满足,那么我需要删除列表中添加的最后一行.这是我的示例代码..

    List<> rows = new List<>();
    foreach (User user in users)
    {
        try
        {
            Row row = new Row();
            row.cell = new string[11];
            row.cell[1] = user."";
            row.cell[0] = user."";
            row.cell[2] = user."";         

            rows.Add(row);

            if (row.cell[0].Equals("Something"))
            {

                //here i have to write code to remove last row from the list
                //row means all the last three fields

            }

        }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何从c#中的列表中删除最后一行.请帮我.

c# list arraylist

33
推荐指数
4
解决办法
9万
查看次数

将对象列表转换为csv的最快方法,其中每个对象值都在新行中

我有一个课程如下:

public class Test
{
    public int Id {get;set;}
    public string Name { get; set; }
    public string CreatedDate {get;set;}
    public string DueDate { get; set; } 
    public string ReferenceNo { get; set; }       
    public string Parent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个Test对象列表

List<Test>testobjs=new List();
Run Code Online (Sandbox Code Playgroud)

现在我想以下列格式将其转换为csv:

"1,约翰格里沙姆,9/5/2014,9/5/2014,1356,0\N 2,斯蒂芬金,9/3/2014,9/9/2014,1367,0\N3,造雨,4/9/2014,18/9/2014,1" ;

我搜索了"将列表转换为csv c#",我得到的解决方案如下:

string.Join(",", list.Select(n => n.ToString()).ToArray())
Run Code Online (Sandbox Code Playgroud)

但是这不会根据需要放置\n,即每个对象

除了字符串构建之外还有其他最快的方法吗?请帮忙...

c# csv

22
推荐指数
4
解决办法
5万
查看次数

MAUI如何去掉标题栏并固定窗口大小?

如何删除 MAUI 中的标题栏并将 Windows 版本应用程序中的窗口大小固定为 800x400 像素?

标题栏 全尺寸

我在网上查了很长时间,但发现一年多前发布的MAUI后续版本已经没有实际信息了。为什么 MAUI 不支持窗口调整大小并禁用其缩放作为条件 WPF,它还使用 XAML 来创建窗口,我希望发布时有这样的可能性。

标题栏看起来很破损,因为它比关闭/折叠/最大化按钮高。

c# winui-3 maui .net-6.0

21
推荐指数
4
解决办法
2万
查看次数

类似于"使用"的东西会创建一个对象并在完成时调用它的方法,但让我做我想要的

我正在使用Lidgren,并且对于我制作的每种新类型的消息,我最终都编写了相同类型的代码.我正在创建一个实例NetOutgoingMessage,在其上运行各种赋值调用,然后在完成后发送它.创建和发送是一样的,所以我想写一个包装器来为我做这个,但它是一个sealed类,它不是IDisposable.我正在做的是:

NetOutgoingMessage om = server.CreateMessage();

om.Write(messageType);
om.Write(data1);
om.Write(data2);

server.SendMessage(om, server.Connections, NetDeliveryMethod.UnreliableSequenced, 0);
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

using(AutoNetOutgoingMessage om(server, messageType, NetDeliveryMethod.UnreliableSequenced))
{
    om.Write(data1);
    om.Write(data2);
}
Run Code Online (Sandbox Code Playgroud)

显然我不能这样using做是否有另一种常见的方法,如果实现这样的功能?我不是在寻找一个非常复杂的解决方案,因为这只是关于我的可维护性,所以我没有问题为每条消息重复我的代码.但我很好奇是否有一个有趣的C#技巧我不知道为此.

c# maintainability using

15
推荐指数
2
解决办法
473
查看次数

如何旋转2d矢量?

我有这个:

static double[] RotateVector2d(double x, double y, double degrees)
{
    double[] result = new double[2];
    result[0] = x * Math.Cos(degrees) - y * Math.Sin(degrees);
    result[1] = x * Math.Sin(degrees) + y * Math.Cos(degrees);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我打电话的时候

RotateVector2d(1.0, 0, 180.0)
Run Code Online (Sandbox Code Playgroud)

结果是: [-0.59846006905785809, -0.80115263573383044]

该怎么做才能得到结果[-1, 0]呢?

我究竟做错了什么?

c# rotation vector-graphics

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

12
推荐指数
3
解决办法
2961
查看次数

为什么在System.Double中重写==但在System.Int32中没有重写,这有什么后果?

在C#中为什么要Double覆盖==Int32没有,影响是什么?

我看一下msdn库.

我看到这个关于double的链接在这里没有说太多(虽然我理解double是Double对象的简写)..它没有显示方法的例子..

但这个链接System.Double确实提到了我在这里寻找的东西

它显示Equality运算符采用双精度,因此过载.

Image对于DoubleMSDN,然后在Methods(列出字段之前)之后,它显示运算符,并显示等于运算符被覆盖

在此输入图像描述

我可以点击"操作员"下的"平等",它说

public static bool operator ==(
    double left,
    double right
)
Run Code Online (Sandbox Code Playgroud)

而当我在MSDN中查看System.Int32 Image For Int32

在此输入图像描述

在该图像中看到,(看到的页面System.Int32)看起来==没有被覆盖.

为什么,这有什么后果?

c# operator-overloading

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

检测离散GPU

我的目标是使用C#检测多GPU系统上的独立GPU(例如集成的Intel HD Graphics +分立AMD Radeon卡)

我通常使用该代码:

String gpuName = String.Empty;

ManagementObjectCollection objectCollection = 
new ManagementObjectSearcher("SELECT Name FROM Win32_VideoController").Get();

foreach (ManagementObject managementObject in objectCollection)
{
     foreach (PropertyData propertyData in managementObject.Properties)
     {                    
          if ((gpuName == String.Empty) || (propertyData.Value.ToString().ToLower().IndexOf("intel") == -1))
          {
               gpuName = propertyData.Value.ToString();
               break;                   
          } 
     }
}
Run Code Online (Sandbox Code Playgroud)

它就像我上面描述的一个魅力.

但它不适合AMD,VIA等(我不完全知道所有制造商)集成卡.

那么切断所有集成GPU的通用方法是什么?

c# gpu integrated

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

如何获取传递给CancelSynchronousIO的线程句柄?

以正常方式在C#中创建后台线程 -

Thread t = new Thread(....);
t.IsBackground = true;
t.Start();
etc etc
Run Code Online (Sandbox Code Playgroud)

想要CancelSynchronousIO从主线程调用取消后台线程上的阻塞IO调用.不知道如何以IntPtr的形式获取线程句柄以传递给函数:

[DllImport("kernel32.dll", SetLastError=true)]
static extern bool CancelSynchronousIo(IntPtr threadHandle);
Run Code Online (Sandbox Code Playgroud)

似乎有各种方法来获取线程ID,但不是句柄?获取线程ID的方式似乎只在托管环境中提供了一个ID,所以没有用于PInvoke调用?我猜我错过了什么.

我是否需要执行其他PInvoke调用以获取线程句柄或者是否有更简单的方法?

c# multithreading

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

行为不一致:在foreach循环中调用时,List <T> .Sort方法中不会抛出异常

我们知道,如果我们在foreach循环中更改集合,则抛出以下异常:

InvalidOperationException:Collection已被修改; 枚举操作可能无法执行.

但是有一种行为方式不同:List<T>.Sort(Comparison<T>).

例如(dotnetfiddle.net):

List<int> list = new List<int> { 2, 1 } ;
foreach (int i in list)
{
    //list.Sort(Comparer<int>.Default);         // InvalidOperationException
    //list.Sort();                              // InvalidOperationException
    list.Sort((a, b) => a.CompareTo(b));        // No exception

    Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)

根据referencesource.microsoft.com,我们可以看到这个特定方法没有版本增量,而上面的方法中有一个:

public void Sort(int index, int count, IComparer<T> comparer) {
    ...
    _version++;
}
Run Code Online (Sandbox Code Playgroud)

在修改列表的所有其他方法中,版本也会增加.

我的问题是:

  1. 这是一个错误吗?或者有这种行为的原因?
  2. 如果它是一个错误,为什么它多年没有修复?

我记得我在大约8 - 9年前将这个错误报告发布给微软,但它被拒绝了.现在我再也找不到了.

c# base-class-library

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