AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[c#](coding)

Martin Hope
lonewsk
Asked: 2025-05-01 07:57:54 +0800 CST

找不到类型或命名空间名称“JsonSerializer”

  • 7

我正在尝试JsonSerializer在一个简单的 .NET 8.0 控制台应用程序中使用它,但是出现了错误:

The type or namespace name 'JsonSerializer' could not be found (are you missing a using directive or an assembly reference?)

我确信这在 .NET 6.0 中可以正常工作,无需任何额外步骤。这是我的代码:

using System;

public class Program
{
    public static void Main(string[] args)
    {
        var myObject = new { Name = "John Doe", Age = 30 };

        string jsonString = JsonSerializer.Serialize(myObject); // Error here

        Console.WriteLine(jsonString); 
    }
}

我使用 Visual Studio 中的默认模板创建了一个新的 .NET 8.0 控制台应用程序。我没有更改任何项目设置。

JsonSerializer我缺少什么?我需要在 .NET 8.0 中添加 NuGet 包或其他东西吗?

c#
  • 1 个回答
  • 28 Views
Martin Hope
MaxH
Asked: 2025-04-30 17:11:28 +0800 CST

如何加速 Leetcode 2290“到达拐角的最小障碍物移除量”的代码

  • 5

我正在解决一些 leetcode 问题。但是对于这个难题,我不知道如何进一步加快我的算法速度。

https://leetcode.com/problems/minimum-obstacle-removal-to-reach-corner/submissions/1621824895

public class Solution {

    public int MinimumObstacles(int[][] grid) {
        int m = grid.Length;
        int n = grid[0].Length;
        var field = new MyDict(m, n, grid);
        field[(0,0)].wallsToHere = 0;
        List<Cell> toDo = [field[(0,0)]];
        while(!toDo.Contains(field[(m-1,n-1)])){
            var c = toDo.OrderBy(x=>x.wallsToHere).First();
            try{
                var testC = field[(c.m-1,c.n)];
                CheckCell(testC, c, toDo);
            }catch{}
            try{
                var testC = field[(c.m+1,c.n)];
                CheckCell(testC, c, toDo);
            }catch{}
            try{
                var testC = field[(c.m,c.n-1)];
                CheckCell(testC, c, toDo);
            }catch{}
            try{
                var testC = field[(c.m,c.n+1)];
                CheckCell(testC, c, toDo);
            }catch{}
            toDo.Remove(c);
            c.done = true;
        }
        return field[(m-1,n-1)].wallsToHere;
    }

    private void CheckCell(Cell testC, Cell c, List<Cell> toDo){
        if(!toDo.Contains(testC) && !testC.done){
            if (testC.wallsToHere > c.wallsToHere + testC.value){
                testC.wallsToHere = c.wallsToHere + testC.value;
            }
            toDo.Add(testC);
        }
    }
}

public class Cell(int value, int m, int n){
    public int value = value;
    public int wallsToHere = (int)Math.Pow(10,5)+1;
    public int m = m;
    public int n = n;
    public bool done = false;
}

public class MyDict:Dictionary<(int,int),Cell>
{
    public MyDict(int m, int n, int[][] grid){
        this.m=m;
        this.n=n;
        this._grid = grid;
    }

    private int m;
    private int n;
    private int[][] _grid;

    public new Cell this[(int,int) key]{
        get{
            if (base.Keys.Contains(key)){
                return base[key];
            }
            else if (key.Item1 < 0 || key.Item2 < 0 || key.Item1 > m || key.Item2 > n){
                throw new Exception();
            }
            else{
                Cell c = new Cell(_grid[key.Item1][key.Item2], key.Item1, key.Item2);
                base[key] = c;
                return c;
            }
        }
    }
}

除了我的 MyDict 实现之外,我不确定如何使用我的 Dijkstra 方法更快地解决这个问题。

如果可能的话,我怎样才能加快速度并改进,而不使用其他方法?

c#
  • 1 个回答
  • 39 Views
Martin Hope
Vroum
Asked: 2025-04-30 16:37:00 +0800 CST

ASP.NET WEB API 更改响应中的 JSON,因为它应该返回

  • 5

所以我目前正在用 .net5 构建一个 ASP.NET WEB API(我在一家公司实习,不幸的是我们只有 .net5 应用程序)。

简而言之,我的数据库中有一个“Component”表,其中包含一个 JSON 属性“Details”,EF Core 将其作为字符串导入到我的模型中。这没问题,我在我的模型中创建了另一个属性,ComponentDTO用于将字符串解析为实际的 JSON 值。

public partial class Component
{
    [...]
    public string Details { get; set; }
    [...]
}
public class ComponentDTO
{
    [...]
    public string Details { get; set; }
    public JObject ParsedDetails { get; set; }
}

我知道它以正确的方式解析,因为我捕获了应该在我的 API 函数内发送的 JSON,如下所示(电路板有组件):

[HttpGet("{Ref}")]
public async Task<ActionResult<IEnumerable<Board>>> Get(string Ref)
{
    try
    {
        var board = await _boardService.GetOneBoard(Ref);

        if (board == null)
        {
            return NotFound();
        }
        Console.WriteLine(board.Compositions.ElementAt(3).Component.ParsedDetails);

        var responseBody = JsonConvert.SerializeObject(board, Formatting.Indented);
        _logger.LogInformation($"Response: {responseBody}");

        return Ok(board);
    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);
        return StatusCode(500, "Internal Server Error");
    }
}

因此,当我记录响应主体时,我得到的是一个组件的详细信息:

"ParsedDetails": {
    "core": "Cortex-A53",
    "speed": "1.2 GHz",
    "memory_interface": "DDR3/4"
}

但在 Swagger 或我的浏览器中,这是我对同一组件获得的结果:

"parsedDetails": {
    "core": [],
    "speed": [],
    "memory_interface": []
}

这是我解析 JSON 属性的方式:

public static JObject ParseJsonDetails(string jsonString)
{
    JObject parsedDetails = string.IsNullOrEmpty(jsonString) ? new JObject() : JObject.Parse(jsonString);
    Console.WriteLine(parsedDetails);
    return parsedDetails;
}

public async Task<BoardDTO> GetOneBoard(string reference)
{
    return await _context.Boards
        .Select(b => new BoardDTO
        {
            [...]
            Compositions = b.Compositions.Select(c => new CompositionDTO
            {
                Component = new ComponentDTO
                {
                    [...]
                    ParsedDetails = ParseJsonDetails(c.Component.Details),
                }
            }).ToList(),
            [...]
        })
        .FirstOrDefaultAsync(b => b.Ref == reference);
}

我实际上不知道该怎么做,因为我在发送响应主体之前就捕获了它,而且我不知道该Ok(board)值是如何处理的,也没有引发任何异常或错误。

c#
  • 1 个回答
  • 33 Views
Martin Hope
Javy Colón
Asked: 2025-04-29 19:50:09 +0800 CST

Blazor Server .NET 9 预览版:IServiceCollection 上的 AddAuthenticationStateSerialization 出现 CS1061 错误

  • 5

问题:

我正在开发一个针对 .NET 9 的 Blazor Server 应用程序。我正在使用标准 Cookie 身份验证并尝试配置预渲染的身份验证状态处理。

我的目标是确保在登录后强制重新加载后,首次渲染时用户身份可用。我尝试使用 .NET 8+ 推荐的服务 AddAuthenticationStateSerialization。

但是,当我将以下行添加到我的 Program.cs 时:

// Correctly called directly on builder.Services
builder.Services.AddAuthenticationStateSerialization();

我收到以下编译错误:

Error CS1061: 'IServiceCollection' does not contain a definition for 'AddAuthenticationStateSerialization' and no accessible extension method 'AddAuthenticationStateSerialization' accepting a first argument of type 'IServiceCollection' could be found (are you missing a using directive or an assembly reference?)

Program.cs相关部分:

这是我的 Program.cs 配置的相关部分:

// Program.cs

// Necessary using directive IS present at the top:
using Microsoft.AspNetCore.Components.Authorization;
// Other standard using directives...

var builder = WebApplication.CreateBuilder(args);

// ... other services (HttpClient, DbContextFactory, Antiforgery, HttpContextAccessor etc.)

// Blazor / interactive components + Auth State Handling
builder.Services
    .AddRazorComponents()
    .AddInteractiveServerComponents();     // Adds interactive server services

// Trying to add state serialization here:
builder.Services.AddAuthenticationStateSerialization(); // <--- ERROR CS1061 HERE

// Keep cascading state
builder.Services.AddCascadingAuthenticationState();

// Conflicting/redundant lines are commented out:
// //builder.Services.AddServerSideBlazor();
// //builder.Services.AddScoped<AuthenticationStateProvider, ServerAuthenticationStateProvider>();

// Cookie authentication setup
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(o =>
    {
        o.LoginPath = "/login";
        // ... other cookie options ...
    });

builder.Services.AddAuthorization(o => { /* ... policies ... */ });

// ... rest of service registrations ...

var app = builder.Build();

// ... middleware pipeline (UseAuthentication, UseAuthorization, UseAntiforgery etc.) ...

// Map components
app.MapRazorComponents<App>()
   .AddInteractiveServerRenderMode(); // Server endpoints enabled

// ... rest of Program.cs ...

app.Run();

我尝试过的方法:

  1. 确认使用 Microsoft.AspNetCore.Components.Authorization; 指令存在。
  2. 仔细检查了 AddAuthenticationStateSerialization 的拼写。
  3. 在 Visual Studio 中执行了多个清理解决方案/重建解决方案循环。
  4. 手动删除 bin 和 obj 文件夹并重建。

我的问题:

为什么编译器在 .NET 9 预览环境中找不到 IServiceCollection 上的 AddAuthenticationStateSerialization 扩展方法?在 .NET 9 预览版中,此方法是否位于不同的命名空间中?它是否可能已被删除/更改?或者我的 SDK 安装或项目引用是否存在问题,导致此类型解析失败?

(可选上下文):我的目标是修复一个常见的 Blazor Server 问题:在成功使用 Cookie 登录并执行了 NavigationManager.NavigateTo(..., forceLoad: true) 后,带有 [Authorize] 的目标页面会重定向回登录页面,因为预渲染组件无法立即识别身份验证状态。遇到此编译错误时,我尝试使用 AddAuthenticationStateSerialization 进行修复。

c#
  • 1 个回答
  • 42 Views
Martin Hope
Nickknack
Asked: 2025-04-29 04:21:55 +0800 CST

在.NET中运行时应用多个环境配置文件

  • 7

我想在我的 .NET 微服务中创建多个appsettings.<environment>.json文件,并且当我运行我的应用程序时,我想指定要使用的环境配置文件并让它们appsettings按照指定的顺序应用。

例如,我希望拥有appsettings.Development.json运行应用程序的默认本地开发属性,但我还希望将其覆盖为 hsql 数据库的appsettings.Hsqldb.jsonDB 属性。appsettings.Development.json

launch.json我在vs Code中有以下文件:

{
    "configurations": [
    {
        "name": "C#: App Debug",
        "type": "coreclr",
        "request": "launch",
        "program": "${workspaceFolder}/API/API.csproj",
        "env": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
    }
    ]
}

我想要做的是"ASPNETCORE_ENVIRONMENT": "Development,Hsqldb"。这样它就会先应用第一个属性Development,Hsqldb然后再应用覆盖它的属性。但这似乎不可能。

可以同时设置两个环境吗?有什么好办法吗?

c#
  • 1 个回答
  • 68 Views
Martin Hope
Isaac Honeyman
Asked: 2025-04-29 02:44:23 +0800 CST

C# 最少的资源/处理器密集型,可在短时间内准确阻止线程

  • 3

我正在开发一个控制台应用程序,它会定期执行两个线程:一个用于 tickEvent 函数,另一个用于更新控制台显示。目前,每个线程只是在条件检查时阻塞,直到下一个周期到来。

这种方法有效,但对处理器的要求很高,而且对于我在后台运行的应用程序来说,会导致风扇发出很大的噪音。

当前方法:

static void HandleTickBehaviour()
{
    Stopwatch tickDuration = new(); //time tick starts

    while (true)
    {
        tickDuration.Restart();

        Tick.Invoke(ElapsedTicks); // invoke all tick event watchers
        Profiler.CalcTime.Add(tickDuration.ElapsedMilliseconds); // how long it took for all tick event to run

        long targetThreadDelay = (int)(Math.Max(25 - Math.Max(_deltaTime - 25, 0), 0) / 1000d * Stopwatch.Frequency); // how long to wait for next tick (25ms - delta time)
        while (true) if (tickDuration.ElapsedTicks >= targetThreadDelay) break;

        _deltaTime = tickDuration.ElapsedMilliseconds;
        Profiler.TickTime.Add(_deltaTime);
        ElapsedTicks++;
    }
}

internal static void HandleConsoleRender()
{
    Stopwatch frameDuration = new();

    while (true)
    {
        frameDuration.Restart();
        RenderConsole();

        while (true) if (frameDuration.ElapsedTicks >= displayWindowsTickInterval) break;

        Profiler.RenderTime.Add(frameDuration.ElapsedTicks);
    }
}

线程阻塞结果: 结果

我尝试实现的另一种方法是使用thread.sleep(),但是由于这些函数每隔几毫秒就会被调用一次,因此重新唤醒线程的延迟实在太多,甚至尝试解释它也会导致更新无法预测地发生。

Thread.Sleep() 结果: 结果

c#
  • 2 个回答
  • 106 Views
Martin Hope
Shog
Asked: 2025-04-28 23:48:04 +0800 CST

有没有办法知道你触摸的是墙的哪一侧?

  • 8

我正在制作一款跑酷游戏,遇到了一个问题。游戏中有一个墙跑机制,如果你在墙上跑,你的玩家旋转方向会被锁定在墙的平面上。只要你撞到墙的左侧(西侧),这个机制就能完美运行。但如果撞到墙的右侧(东侧),玩家就会被翻转到错误的方向。

private void WallStick()
{
    if (leftWall) wallNormal = leftWallHit.normal.y;
    else if (rightWall) wallNormal = rightWallHit.normal.y;

    if (leftWall) playerMovement.rotationScript.yRotation = wallNormal + 90f;
    else if (rightWall) playerMovement.rotationScript.yRotation = wallNormal - 90f;
}

leftWall 和 rightWall 是布尔值,用于指示玩家朝向墙壁的方向。命中是射线投射。其他所有内容似乎都一目了然,如有疑问,请提出。这段代码完美地运行,但前提是玩家在墙的西侧奔跑。

我可以将每面墙分成两块,并分配一个 layerMask 来区分光线投射击中哪一侧,但这看起来非常笨重,而且会让我重新设计整个世界。

有什么想法吗?

c#
  • 2 个回答
  • 93 Views
Martin Hope
Andrei
Asked: 2025-04-28 18:14:09 +0800 CST

LINQ Order()/OrderBy() 和 Take(k) 的时间复杂度是多少?

  • 9

以下 C# 代码的时间复杂度是多少?

array.Order().Take(k).ToArray();

LINQ 会将其视为 QuickSelect 吗?还是会以复杂度O(n log n)执行完整的数组排序?

c#
  • 2 个回答
  • 119 Views
Martin Hope
DeepDish
Asked: 2025-04-28 17:40:50 +0800 CST

即使使用显式映射,Entity Framework Core 仍尝试插入不存在的列“PecaIdPeca”

  • 5

使用 Entity Framework Core 6(没有迁移,SQL Server 数据库)保存实体时遇到问题。

即使使用外键的明确映射,EF Core 仍会尝试插入表中不存在的列(PecaIdPeca),从而导致 SQL 错误。

模型:

public class OrcamentoPeca
{
    [Key]
    [Column("ID_OrcamentoPeca")]
    public int IdOrcamentoPeca { get; set; }

    [Column("ID_Orcamento")]
    public int IdOrcamento { get; set; }

    [Column("ID_Peca")]
    public int IdPeca { get; set; }

    [Column("Quantidade")]
    public int Quantidade { get; set; }

    // Propriedades de navegação (sem [ForeignKey] attribute)
    public virtual Orcamento Orcamento { get; set; }
    public virtual Peca Peca { get; set; }
}

插入方法:

[HttpPost]
public async Task<IActionResult> SalvarPecasSelecionadas(int IdOrcamento, List<int> PecasSelecionadas, Dictionary<int, int> Quantidades)
{
    foreach (var pecaId in PecasSelecionadas)
    {
        var quantidade = Quantidades.ContainsKey(pecaId) ? Quantidades[pecaId] : 0;

        if (quantidade > 0)
        {
            var orcamentoPeca = new OrcamentoPeca
            {
                IdOrcamento = IdOrcamento,
                IdPeca = pecaId,
                Quantidade = quantidade
            };

            _context.OrcamentoPeca.Add(orcamentoPeca);

            var peca = _context.Pecas.FirstOrDefault(p => p.IdPeca == pecaId);

            if (peca != null)
                peca.Stock -= quantidade;
        }
    }

    await _context.SaveChangesAsync();

    return RedirectToAction("DetalhesOrcamento", new { id = IdOrcamento });
}

数据库上下文:

modelBuilder.Entity<OrcamentoPeca>(entity =>
{
    entity.HasKey(e => e.IdOrcamentoPeca);
    entity.ToTable("OrcamentoPeca");
    entity.Property(e => e.IdOrcamentoPeca).HasColumnName("ID_OrcamentoPeca");
    entity.Property(e => e.IdOrcamento).HasColumnName("ID_Orcamento");
    entity.Property(e => e.IdPeca).HasColumnName("ID_Peca");
    entity.Property(e => e.Quantidade).HasColumnName("Quantidade");

    entity.HasOne(e => e.Orcamento)
        .WithMany(o => o.OrcamentoPecas)
        .HasForeignKey(e => e.IdOrcamento)
        .OnDelete(DeleteBehavior.Cascade);

    entity.HasOne(e => e.Peca)
        .WithMany()
        .HasForeignKey(e => e.IdPeca)
        .OnDelete(DeleteBehavior.Cascade);
});

错误:

SqlException:列名“PecaIdPeca”无效。Microsoft.Data.SqlClient.SqlCommand+<>c.b__211_0(任务结果)

DbUpdateException:保存实体更改时发生错误。有关详情,请参阅内部异常。

Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection 连接,CancellationToken 取消令牌)

生成的SQL代码:

INSERT INTO [OrcamentoPeca] ([ID_Orcamento], [ID_Peca], [PecaIdPeca], [Quantidade])
OUTPUT INSERTED.[ID_OrcamentoPeca]
VALUES (@p0, @p1, @p2, @p3);

中的映射DbContext是正确的,该列PecaIdPeca在数据库中不存在,我已经清理并重建了该项目。

任何帮助都将不胜感激。

c#
  • 1 个回答
  • 55 Views
Martin Hope
Miguel Bartelsman
Asked: 2025-04-28 16:28:23 +0800 CST

ConcurrentDictionary 如何实现 ICollection 并让 Add 成为私有成员?[重复]

  • 2
这个问题已经有答案了:
为什么接口的显式实现不能公开? (2 个回答)
2天前关闭。

如果你查看它的实现,ConcurrentDictionary<K,V>你会发现它有一个ICollection<KeyValuePair<K,V>.Add(...)定义为私有的成员。然而,据我理解,接口实现不能标记为私有,而且如果我尝试这样做,编译器也不允许。

这怎么可能呢?

c#
  • 1 个回答
  • 75 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve