小编ded*_*cos的帖子

声明一个不安全的固定自定义结构数组的解决方法?

是否有任何错误CS1663的解决方法("固定大小缓冲区类型必须是以下之一:bool,byte,short,int,long,char,sbyte,ushort,uint,ulong,float或double.")?

我需要从另一个blittable自定义类型结构声明一个不安全的固定数组,但我陷入了这个编译错误.

显示一些代码来阐明下面的问题.

struct s1
{
    byte _b1;
    byte _b2;
}

unsafe struct s2
{
    fixed s1 _s1[5]; // CS1663 here...
}
Run Code Online (Sandbox Code Playgroud)

请注意,这两个结构是blittable,所以错误对我没有任何意义.

任何人都知道我能做什么?

谢谢.

c# struct pointers fixed-size-types

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

如何获得固定的缓冲区长度?

有没有办法获得固定大小的缓冲区的长度?

就像是:

public struct MyStruct
{
    public unsafe fixed byte buffer[100];

    public int foo()
    {
        return sizeof(buffer); // Compile error.
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法完成这样的事情?

c# pointers unsafe low-level

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

为什么stackalloc接受可变长度?

知道为什么'stackalloc'关键字接受可变长度?

如果该指令返回指向堆栈帧中分配的缓冲区的指针,编译器如何管理它?每次调用它来组织堆栈帧时,它都会在运行时重新编译该函数?

谢谢.

c# pointers low-level stackalloc

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

在async/await模式中"多线程"实际执行了什么代码?

在这段代码中:

public async Task v_task()
{
    await Task.Run(() => Console.WriteLine("Hello!"));
}

public async void v1()
{
    await v_task();
    // some other actions...
}

public void ButtonClick()
{
    v1();

    Console.WriteLine("Hi!");
}
Run Code Online (Sandbox Code Playgroud)

如果调用ButtonClick,上述哪些方法实际上是在async/await生成的底线程池中并行执行的?

我的意思是,对于使用async/await的竞争条件,我应该关注什么?所有异步方法都必须在同一个调用者的线程中执行?我应该在可能的共享状态上使用互斥吗?如果是,我怎么能检测到共享状态对象是什么?

c# multithreading asynchronous async-await

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

互斥锁如何在低级别等待解锁?

我想知道互斥锁(或其他锁定实现)如何实现锁定函数的wait functionallity.我的意思是,是一个将mutex.lock调用队列的cpu指令,是仅在OS中实现的还是什么?

在我做的测试中,我认为这个等待函数只在OS层完成,并且创建了某种旋转,检查是否可以继续锁定,如果没有让线程进入休眠状态.是对的吗?

非常感谢你.

c++ multithreading mutex locking

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

如何防止调用struct的默认构造函数?

有没有办法阻止调用结构的默认构造函数?

我的项目中有几个结构,其中一些我不能让任何情况下调用默认构造函数(这将导致我的代码中出现很多不需要的行为).

PS.:在编写某些特殊结构(无法用默认构造函数实例化)编译时,只是指示我的任何解决方案"错误地"实例化对我来说都没问题.一个简单的编译器警告应该足够我的情况!

c# struct default-constructor

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

什么是“is”运算符后跟空双括号?

这个表达式中这些空双括号的作用是什么?

record MyRecord(int i, int? j);

public void MyMethod()
{
    MyRecord myVar = new(10);

    if (myVar is { i: { } })
    {
          // ?
    }

    if (myVar is { j: { } })
    {
          // ?
    }
}
Run Code Online (Sandbox Code Playgroud)

我在参考页中没有找到。

这只是另一种检查方式吗null

c#

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