小编PMF*_*PMF的帖子

Visual Studio 2022 中新 C# 类的默认访问修饰符

当我在 Visual Studio (C#) 中生成新类时,我希望将默认访问修饰符从“内部”更改为“公共”。例如:

public class Animal
{
}
Run Code Online (Sandbox Code Playgroud)

代替:

internal class Animal
{
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio (2022) 中是否有可以设置新类的默认访问修饰符的设置?

access-modifiers visual-studio

25
推荐指数
3
解决办法
6845
查看次数

尝试在项目上启用Multilingual app toolkit时,没有任何反应

当我尝试在C#项目上启用Mulitlingual app工具包时,我收到如下错误,没有更多的事情发生:

项目"项目名称"未启用 - 无法确定项目的源文化.

怎么了?

.net c# multilingual multilingual-app-toolkit

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

Github actions 作业无缘无故被取消

我正在尝试为我的一个项目设置一个 github 操作脚本。该项目目前是私有的,因为我希望它在第一次发布之前处于 RC 状态。由于它已接近准备就绪,我打算现在设置一个自动构建,但我看到了一些奇怪的行为。该项目是一个简单的 C# 库,因此 .yml 文件非常简单:


name: .NET Core Desktop

on: [push, pull_request]

jobs:

  build:

    strategy:
      matrix:
        configuration: [Debug, Release]

    runs-on: windows-latest  

    env:
      Solution_Name: Replacement.sln                         # Replace with your solution name, i.e. MyWpfApp.sln.
      Test_Project_Path: UnitTest.csproj                 # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj.

    steps:
    - name: Checkout
      uses: actions/checkout@v3
      with:
        fetch-depth: 0

    # Run build
    - name: Run build
      run: ./build.cmd --target pack --configuration ${{ matrix.configuration }}
Run Code Online (Sandbox Code Playgroud)

有时,其中一个构建(调试或发布,或两者)都会失败,并出现以下条目

Terminate batch job (Y/N)? 
Error: The …
Run Code Online (Sandbox Code Playgroud)

build github-actions

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

为什么“file”被视为 C# 中的关键字?

生成以下代码CS9056(“类型和别名不能命名为‘文件’”):

public sealed class file
{

}
Run Code Online (Sandbox Code Playgroud)

在我将 VS 升级到 2022 年预览版 17.4.0 后,会发生这种情况。之前的代码编译得很好。我找不到任何信息表明 thatfile现在是 C# 中的关键字。我尝试翻译的解决方案使用 5.0SDK 进行构建,但目标是 .NET Framework 4.8。

我确实知道类型通常应使用大写名称,并且我可以通过更改为 来解决该问题class fileclass @file但这是在自动生成的文件中,我无法更改生成器。应用一些sed技巧似乎是一种技巧。

为什么file这里被视为关键字以及它的用途是什么?我可以禁用它吗?

c# file keyword visual-studio-2022

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

究竟什么是CLR的本机调用堆栈?

浏览一些论坛我遇到了这个答案,其中回答者将以下内容称为本机调用堆栈

00000000`0014ea10 00000642`7f67d4a2 0x642`80150142
00000000`0014ea90 00000642`7f5108f5 mscorwks!CallDescrWorker+0x82 
00000000`0014eae0 00000642`7f522ff6 mscorwks!CallDescrWorkerWithHandler+0xe5
00000000`0014eb80 00000642`7f49a94b mscorwks!MethodDesc::CallDescr+0x306 
00000000`0014edb0 00000642`7f474ae4 mscorwks!ClassLoader::RunMain+0x23f
00000000`0014f010 00000642`7f5efb1a mscorwks!Assembly::ExecuteMainMethod+0xbc 
00000000`0014f300 00000642`7f467d97 mscorwks!SystemDomain::ExecuteMainMethod+0x492
00000000`0014f8d0 00000642`7f482c24 mscorwks!ExecuteEXE+0x47
Run Code Online (Sandbox Code Playgroud)

究竟什么是关于CLR的本机调用堆栈(这里我们正在看CLR调用我认为的Main方法)以及如何查看并了解我本地计算机上的本机调用堆栈用于教育目的?

c# clr

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

MSVC 是否有溢出检查数学函数?

在寻找对有符号和无符号整数算术进行溢出检查的函数时,我遇到了这个答案,它提供了很好的编译器内在函数,可以在 GCC 中进行检查数学。由于我当前编写的代码需要跨平台,因此我也需要 MSVC(Microsoft Visual Studio)编译器类似的东西。

是否存在或者我必须手动实现它?

c++ integer-overflow visual-c++

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

为什么使用 `Span<T>` 比普通数组更昂贵?

我有一个非常复杂的数学算法,它已经在我的代码中存在多年了。今天,我做了一些高级性能测试,发现该算法占用了大量 CPU 时间。然后我看到(由于其年龄)该算法使用了double[] array = new double[6]几次,然后将数组传递给子函数。我认为使用Span<double>stackalloc double应该会稍微提高性能,因为它减少了 GC 负载并可能减少了一些范围检查。

令我非常惊讶的是,事实恰恰相反,这一变化导致整体测试时间从 23 秒提高到 28 秒。我编写了以下测试用例来展示该行为(实际代码要复杂得多)

        // This one must be quite big to see the timing difference for these simple test cases
        private const int MeasuremenLoopCount = 1000000;
        private const int ArraySize = 10;

        [Fact]
        public void UseArray()
        {
            for (int i = 0; i < MeasuremenLoopCount; i++)
            {
                double[] array = new double[ArraySize];
                array[0] = 2;

                CalcOnArray(array);
            }
        }

        private void CalcOnArray(double[] …
Run Code Online (Sandbox Code Playgroud)

c# optimization performance dynamic-memory-allocation

5
推荐指数
0
解决办法
963
查看次数

如何在 C# 中使用数组返回类型的 DLLImport 函数?

这里是: static uint8_t* Compress(const uint8_t* input, uint32_t inputSize, uint32_t* outputSize, int compressionLevel);

我试过了 :

[DllImport("Mini7z.dll")]
public static extern byte[] Compress(byte[] input, uint inputSize, out uint outputSize, int compressionLevel);
Run Code Online (Sandbox Code Playgroud)

和这个

[DllImport("Mini7z.dll")]
public static extern byte[] Compress(byte[] input, uint inputSize, uint* outputSize, int compressionLevel);
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何作用

c# c++ pinvoke

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

为什么我的ThreadID在并行运行的10个任务中不是唯一的?

我的代码将10个“作业”放入队列,显示其线程ID,并立即开始并行运行。我知道作业是并行运行的,因为每个作业只是20秒的延迟,所有10个作业都在20秒内完成。让我感到困惑的是,有多个重复的ThreadID,并且据推测每个线程应该具有我所阅读的唯一ID。这怎么可能?是否存在重复项,因为重复项可能位于不同的处理器内核上(如果这样的话,那将不是很大,因为最终我希望能够使用其线程ID取消任务)?

这是在我的控制台窗口中显示的线程ID的列表”

线程ID:10线程ID:11线程ID:11线程ID:12线程ID:13线程ID:14线程ID:15线程ID:16线程ID:6线程ID:6

我尽可能地简化了代码,并定时完成了程序花了多长时间。

这是一个控制台应用程序

class Program
{

    private static Object lockObj = new Object();

    static void Main(string[] args)
    {
        var q = new TPLDataflowMultipleHandlers();
        var numbers = Enumerable.Range(1, 10);

        Console.Clear();

        foreach (var num in numbers)
        {
            q.Enqueue(num.ToString());
        }
        Console.ReadLine();
    }
} // end of program class


public class TPLDataflowMultipleHandlers
{
    private static Object lockObj = new Object();

    private ActionBlock<string> _jobs;

    public TPLDataflowMultipleHandlers()
    {
        var executionDataflowBlockOptions = new ExecutionDataflowBlockOptions()
        {
            MaxDegreeOfParallelism = 16,
        };

        _jobs = new ActionBlock<string>(async (job) => …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading

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