小编Ale*_*rov的帖子

.NET Core中实现了哪种内存模型?

ECMA CLI规范定义了一个弱内存模型。这样可以对命令执行顺序进行重新排序(这对于提高性能很有用)。但是,为这种模型编写低级代码非常困难。

最重要的是-X86 / AMD64处理器体系结构具有更严格的(强)内存模型。结果,Microsoft在其CLR实现中实现了比规范中描述的更强大的内存模型。

.NET Core中的内存模型是否已更改?该框架可能可以在内存模型比X86 / AMD64弱的体系结构上运行。

此外,.NET Core合并了Mono等。据我所知,Mono内存模型较弱,对应于ECMA。

.NET 5简介中撰写:

通过充分利用.NET Core,.NET Framework,Xamarin和Mono来扩展.NET的功能。

因此,我认为,如果不是现在,那么将来这些运行时将合并为一个整体。
在下面的文章中写道:

我们正在相互替代CoreCLR和Mono的过程中。我们将使它像构建开关一样简单,可以在不同的运行时选项之间进行选择。

如果我理解正确,将有两个(或更多)运行时。也许每个人都会有自己的记忆模型。

我们在说什么:内存模型

c# .net-core

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

将空XML元素反序列化为Guid.Empty

我有一些反序列化的麻烦.

<Order>
    ...
    <CardNumber />
    ...
</Order>
Run Code Online (Sandbox Code Playgroud)

如果我使用

<CardNumber>00000000-0000-0000-0000-000000000000</CardNumber>
Run Code Online (Sandbox Code Playgroud)

它正常工作,但万一我只使用<CardNumber />- 对象不反序列化(

有没有办法将空元素反序列化为Guid.Empty?

应该使用此元素的值映射的属性:

[XmlElement(ElementName = "CardNumber")]
[JsonProperty("CardNumber")]
public Guid? CardNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)

JSON中的相同情况正常工作并使用Guid.Empty而不是空元素值

{
    "CardNumber": ""
}
Run Code Online (Sandbox Code Playgroud)

c# xml serialization json

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

使用 System.Text.Json 读取/写入 JSON

我们当前使用 NewtwonSoft.json,但出于安全原因需要迁移到 System.Text.JSON。

因此,我们是 System.Text.JSON 的新手,并且在读取以下 JSON 文件时遇到问题。

理想情况下,我们希望读取并最终将每条记录放入网格中的单独行中,其中 ID、名称和 ContractTypeID 作为列 A、B 和 C。更喜欢 VB.net,但谷歌搜索使我们相信 VB.net 不受支持System.Text.JSON 中的很多内容。所以 C# 可以工作。感谢任何能让我们继续前进的反馈。我们尝试使用练习 C# 项目,但出现错误:

“System.Text.Json.JsonReaderException:“0xEF”是值的无效开头。LineNumber:0 | BytePositionInLine:0。” 在 Reader.Read 行。

var fileName = @"D:\MyFile.json";

byte[] data = System.IO.File.ReadAllBytes(fileName);

Utf8JsonReader reader = new Utf8JsonReader(data);

while (reader.Read())
Run Code Online (Sandbox Code Playgroud)
[
    {
         "ID": "001",
         "Name": "INT SYS CO",
         "ContractTypeID": "CPAF"
    },
    {
         "ID": "002",
         "Name": "PLT",
         "ContractTypeID": "CPFF"
    },
    {
         "ID": "003",
         "Name": "SBAND",
         "ContractTypeID": "CPIF"
    },
    {
         "ID": "004",
         "Name": "SE",
         "ContractTypeID": "CPIF_PI"
    },
    { …
Run Code Online (Sandbox Code Playgroud)

c# json system.text.json

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

排序的特殊性

字符的'-'代码是45,字符的代码'a'是97.很明显'-' < 'a'是真的.

Console.WriteLine((int)'-' + " " + (int)'a');
Console.WriteLine('-' < 'a');
Run Code Online (Sandbox Code Playgroud)

45 97

因此,以下排序的结果是正确的

var a1 = new string[] { "a", "-" };
Console.WriteLine(string.Join(" ", a1));
Array.Sort(a1);
Console.WriteLine(string.Join(" ", a1));
Run Code Online (Sandbox Code Playgroud)

a -
- a

但为什么以下类型的结果是错误的?

var a2 = new string[] { "ab", "-b" };
Console.WriteLine(string.Join(" ", a2));
Array.Sort(a2);
Console.WriteLine(string.Join(" ", a2));
Run Code Online (Sandbox Code Playgroud)

ab -b
ab -b

.net c#

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

仅在 DataGridView 的某一列上使用手形光标

我正在用 C# 编写一个表单应用程序,我有一个 DataGridView,它显示来自 SQL 服务器的数据。这些数据包含一个名为的Remove列,该列的所有行都包含字符串Remove。现在我想通过更改背景颜色并使用手形光标使该列的所有单元格看起来像一个按钮。

我的问题是,我不能仅在此列上使用手形光标。我想要的是,当鼠标悬停在该Remove列的任何行上时,将鼠标指针更改为手形光标,而不是其他任何地方。

for(int i=0; i<myDataGridView.RowCount; i++){
    myDataGridView.Cursor = Cursors.Hand;
}
Run Code Online (Sandbox Code Playgroud)

没有做我想要的,因为鼠标指针变成了 DataGridView 上任何地方的手形光标,而不仅仅是Remove列上。我试过类似的东西

for(int i=0; i<myDataGridView.RowCount; i++){
    myDataGridView.Columns["Remove"].Cursor = Cursors.Hand;
}
Run Code Online (Sandbox Code Playgroud)

但这给出了一个错误:

System.Windows.Forms.DataGridViewColumn 不包含“光标”的定义。

有什么好的方法可以实现这一目标吗?谢谢你。

c# datagridview winforms

3
推荐指数
2
解决办法
3676
查看次数

如何将大型foreach循环分解为批处理并同时处理它?

foreach (var deviceId in deviceList)
{
    // register device into IoT hub 
    Device device;
    RegistryManager registryManager = RegistryManager.CreateFromConnectionString("connectionString");
    device = await registryManager.AddDeviceAsync(new Device(deviceId));

    // send message to iot hub
    DeviceClient deviceClient;
    await deviceClient.SendEventAsync("data");                       
}
Run Code Online (Sandbox Code Playgroud)

如果设备是10000,那我怎么能把它分成多个批处理并处理呢?

我试过这个代码,但它并没有让人失望

public IEnumerable<user> GetBatch(int pageNumber)
{
    return users.Skip(pageNumber * 1000).Take(1000);
}
Run Code Online (Sandbox Code Playgroud)

c# foreach loops batch-processing c#-4.0

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

使用 XUnit 和 AspNetCore.TestHost 测试 .net core Web api 控制器文件上传

我有这个控制器来上传文件:

[HttpPost]
public async Task<IActionResult> Post([FromForm] FileInformation fileInfo)
{
    int newFileVersion = 1;

    if (fileInfo == null || fileInfo.Files == null || fileInfo.Files.Count == 0)
        return BadRequest("File(s) not found");

    try
    {
        foreach (var locFile in fileInfo.Files)
        {
            //check for file extension, if not there, return an error
            var fileExtension = Path.GetExtension(locFile.FileName);
            if (string.IsNullOrEmpty(fileExtension))
                return BadRequest("Files must include file extension");


            var valid = await fileUtilities.IsFileValid(locFile);

            var newFileName = string.Concat(Guid.NewGuid().ToString(),valid.fileExtension);

            var newFileLocation = Path.Combine(config.GetSection("StoredFilePath").Value, newFileName);
           

            if (!valid.FileExtensionFound)
            {
                return BadRequest($"Error {valid.FileExtensionFoundError}");
            } …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing xunit.net asp.net-core

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

引导多个生产者和消费者

我有以下代码:

var channel = Channel.CreateUnbounded<string>();

var consumers = Enumerable
    .Range(1, 5)   
    .Select(consumerNumber =>
        Task.Run(async () =>
        {
            var rnd = new Random();
            while (await channel.Reader.WaitToReadAsync())
            {
                if (channel.Reader.TryRead(out var item))
                {
                    Console.WriteLine($"Consuming {item} on consumer {consumerNumber}");
                }
            }
        }));

var producers = Enumerable
    .Range(1, 5)    
    .Select(producerNumber =>
        Task.Run(async () =>
        {
            var rnd = new Random();
            for (var i = 0; i < 10; i++)
            {
                var t = $"Message {i}";
                Console.WriteLine($"Producing {t} on producer {producerNumber}");

                await channel.Writer.WriteAsync(t);
                await Task.Delay(TimeSpan.FromSeconds(rnd.Next(3))); …
Run Code Online (Sandbox Code Playgroud)

c# channel producer-consumer system.threading.channels

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

C# 如何获取字符串中引号之间的文本?

我有一个字符串样本:" 'john', 'michile,k', 'dana's font' "

我怎样才能得到如下输出:

'约翰'
'米歇尔,k'
'达纳的字体'

注意:我有一个条款可以更改“dana 的字体”,例如“dana\'s 字体”...

c#

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

如何让我的API请求使用XML而不是参数?

我在C#中创建了一个带有4个参数的API.这工作正常.要让它接受XML文件而不是参数,我需要做些什么?

这是代码:

public string Post(int orderID, bool internalUse, string subject, string message)
{
    return "orderID: " + orderID + "; internalUse: " + internalUse + "; subject: " + subject + "; message: " + message;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用像这样的Post请求从Postman调用它:

http://localhost:58069/api/values/SendEmail?orderID=1234&internalUse=true&subject=Hello&message=Hello World
Run Code Online (Sandbox Code Playgroud)

我宁愿使用XML文档,其中URL如下所示:

http://localhost:58069/api/values/SendEmail
Run Code Online (Sandbox Code Playgroud)

并且参数将在XML文件中指定.

我尝试使用这个XML文件(也尝试使用和不使用嵌套在响应标记中的参数以及使用和不使用XML版本标记):

<?xml version="1.0" encoding="utf-8" ?>
<response>
    <orderID>1234</orderID>
    <internalUse>true</internalUse>
    <subject>Hello</subject>
    <message>Hello World</message>
</response>
Run Code Online (Sandbox Code Playgroud)

以下是Postman中请求的外观:

在此输入图像描述

这会触及我的SendEmail方法,但所有变量都是空白的.我需要在代码方面做些什么,还是我没有正确创建Postman请求?

c# xml asp.net rest post

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