我在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#中的列表中删除最后一行.请帮我.
我有一个课程如下:
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,即每个对象
除了字符串构建之外还有其他最快的方法吗?请帮忙...
如何删除 MAUI 中的标题栏并将 Windows 版本应用程序中的窗口大小固定为 800x400 像素?
我在网上查了很长时间,但发现一年多前发布的MAUI后续版本已经没有实际信息了。为什么 MAUI 不支持窗口调整大小并禁用其缩放作为条件 WPF,它还使用 XAML 来创建窗口,我希望发布时有这样的可能性。
标题栏看起来很破损,因为它比关闭/折叠/最大化按钮高。
我正在使用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#技巧我不知道为此.
我有这个:
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]
呢?
我究竟做错了什么?
之间有什么区别:
namespace Outer.Inner
{
}
Run Code Online (Sandbox Code Playgroud)
和
namespace Outer
{
namespace Inner
{
}
}
Run Code Online (Sandbox Code Playgroud)
在C#?
在C#中为什么要Double
覆盖==
却Int32
没有,影响是什么?
我看一下msdn库.
我看到这个关于double的链接在这里没有说太多(虽然我理解double是Double
对象的简写)..它没有显示方法的例子..
但这个链接System.Double
确实提到了我在这里寻找的东西
它显示Equality运算符采用双精度,因此过载.
Image对于Double
MSDN,然后在Methods(列出字段之前)之后,它显示运算符,并显示等于运算符被覆盖
我可以点击"操作员"下的"平等",它说
public static bool operator ==(
double left,
double right
)
Run Code Online (Sandbox Code Playgroud)
而当我在MSDN中查看System.Int32
Image For Int32
时
在该图像中看到,(看到的页面System.Int32
)看起来==
没有被覆盖.
为什么,这有什么后果?
我的目标是使用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#中创建后台线程 -
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调用以获取线程句柄或者是否有更简单的方法?
我们知道,如果我们在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)
在修改列表的所有其他方法中,版本也会增加.
我的问题是:
我记得我在大约8 - 9年前将这个错误报告发布给微软,但它被拒绝了.现在我再也找不到了.