相关疑难解决方法(0)

如何使用单个值填充/实例化C#数组?

我知道C#中实例化的值类型数组会自动填充类型默认值(例如,对于bool为false,对于int为0等).

有没有办法使用不是默认值的种子值自动填充数组?之后是创建还是内置方法(比如Java的Arrays.fill())?假设我想要一个默认为true的布尔数组,而不是false.是否有内置的方法来执行此操作,或者您只需要使用for循环遍历数组?

 // Example pseudo-code:
 bool[] abValues = new[1000000];
 Array.Populate(abValues, true);

 // Currently how I'm handling this:
 bool[] abValues = new[1000000];
 for (int i = 0; i < 1000000; i++)
 {
     abValues[i] = true;
 }
Run Code Online (Sandbox Code Playgroud)

必须遍历数组并将每个值"重置"为true似乎是无效的.有没有办法解决?也许通过翻转所有价值观?

在输出这个问题并思考之后,我猜测默认值只是C#如何在幕后处理这些对象的内存分配的结果,所以我想这可能不可能做到这一点.但我仍然想知道!

c# arrays default-value

188
推荐指数
15
解决办法
23万
查看次数

C#中的memset相当于什么?

我需要byte[]用一个非零值填充一个.如何在C#中执行此操作而不循环遍历byte数组中的每个?

更新:评论似乎将此分为两个问题 -

  1. 是否有一个Framework方法来填充可能类似于的byte [] memset
  2. 当我们处理一个非常大的数组时,最有效的方法是什么?

我完全同意,正如埃里克和其他人所指出的,使用一个简单的循环就可以了.问题的关键是看我是否可以学习一些关于C#的新东西:)我认为Juliet的并行操作方法应该比简单的循环更快.

基准: 感谢Mikael Svenson:http://techmikael.blogspot.com/2009/12/filling-array-with-default-value.html

事实证明,for除非你想使用不安全的代码,否则简单的循环是可行的.

抱歉我的原帖不清楚.埃里克和马克的评论都是正确的; 需要有更多专注的问题.感谢大家的建议和回应.

c# memset equivalent

78
推荐指数
11
解决办法
6万
查看次数

C#Array.Value与c ++中创建的数组不同

在C#中处理以下情况的最佳方法是什么?

我有一个用C/C++编写的服务器应用程序.

例如,它创建一个unsigned char长度缓冲区256.在此缓冲区中,服务器存储客户端发送给它的数据.存储后,对接收的缓冲区进行一些加密检查.

我正在用C#为这台服务器编写一个客户端.

问题是服务器期望固定长度为256的缓冲区.

当我创建一个byte[]内容和总长度为256的数组时,加密检查失败.

我发现的原因很简单.服务器需要256字节长的缓冲区.例如,如果消息是"Hello World",则缓冲区的其余部分必须为0填充.或者,更好地解释:字节需要(unsigned) "204"(signed) "-52".

我认为这是一个C/C++概念问题.

为了解决我的问题,我明确地设置了该值.

public static byte[] GetCBuffer(this byte[] data, int len)
{
    byte[] tmp = new byte[len];
    for(int i = 0; i < len; i++)
        if(i < data.Length)
            tmp[i] = data[i];
        else
            tmp[i] = 204;
    return tmp;
}
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来处理这些艺术预期的字节?我没有看到必要的东西吗?

c# integer

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

标签 统计

c# ×3

arrays ×1

default-value ×1

equivalent ×1

integer ×1

memset ×1