在C#中使用默认值初始化字符串数组的3种方式

Posted .NET100

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中使用默认值初始化字符串数组的3种方式相关的知识,希望对你有一定的参考价值。

在本文中,您将学习到新建字符串数组如何设置默认值。数组是可以使用索引访问的相同类型的元素的集合。对于字符串数组,每个元素都是一个字符串值。在 C# 中创建新的字符串数组时,默认值为 null。但是,在某些情况下,您可能希望使用特定的默认值而不是 null 初始化字符串数组。例如,希望 Array 的所有元素都有初始默认值(比如来源城市,默认为“未知”)。

在 C# 中使用数组的方式如下,一般初始化为null。

//以下五个元素的字符串数组;每个初始化为 null
string[] myArray = new string[5];
//访问方式
string firstElement = myArray[0];
//firstElement的结果为null

如果指定初始化字符串数组的值不为null,而有默认的值,怎么实现呢?下面有三种方法实现默认值初始化字符串数组。

1、Enumerable.Repeat

在 C# 中,Enumerable.Repeat 方法可以用来创建一个包含指定元素重复若干次的序列。首先Enumerable.Repeat生产指定元素的若干序列,然后用ToArray()转换成数组。代码如下:

public class Program

    public static void Main()

        string element = "未知";
        int count = 10;
        string[] array = Enumerable.Repeat(element, count).ToArray();
        Console.WriteLine(String.Join(",", array));
    

上面代码初始化元素为”未知“,数量为10个。最后用String.Join 方法用逗号隔开打印出数组的内容。

输出

2、使用for循环

for 循环是初始化数组的推荐方法。下面的代码演示如何使用 for 循环在 C# 中用初始值填充数组。

public class Program

    public static void Main()

        string element = "未知";//初始化值为未知
        int count = 10;
        //新建一个字符串数组,长度为10
       string[] array = new string[count];
        for (int i = 0; i < count; i++)
        
            array[i] = element;
        
        Console.WriteLine(String.Join(",", array));
    

这是一个 C# 程序,它创建一个整数数组,将每个元素初始化为值 2,然后使用

输出


3、使用Array.Fill

在 C# 中,Array.Fill 方法可以用来为数组中的元素赋值。

语法

Array.Fill(array, value);

第一个参数表示我们要填充的 Array,第二个参数定义我们要为每个数组索引提供的值。由于此方法是静态和通用的,因此我们可以将其与任何对象类型的数组一起使用,并且不需要实例化程序类来使用它。

下面我们实现上面案例的填充,代码如下

public class Program

    public static void Main()

         string element = "未知";//初始化值为未知
        int count = 10;
        //新建一个字符串数组,长度为10
       string[] array = new string[count];
       //使用Array.Fill填充
        Array.Fill(array, element);
        Console.WriteLine(String.Join(",", array));
    

//欢迎关注公众号:DOTNET开发跳槽,领取海量面试题。加微信号xbhpnet入群

输出

结语

本文介绍了如何在C#中使用默认值初始化字符串数组的3种方式,小编推荐使用方法2和方法3。希望本文对你有所帮助,欢迎大家留言和吐槽。

参考:微软官方文档

来源公众号:DotNet开发跳槽

如何在 char 数组中使用默认值?

【中文标题】如何在 char 数组中使用默认值?【英文标题】:How to use default values in a char array? 【发布时间】:2015-01-31 21:58:30 【问题描述】:

我有一个最简单的问题:如何在 C 中初始化一个值? 我的变量是 char[20] 类型的,它是在我的单元之外的某个地方声明的。无法更改类型。

现在我想给它一个默认值,假设所有空字符(或空格等),但这根本不起作用。 我已经试过了:

方法一。

host = "";

=> 无法从 'const char [1]' 转换为 'char [20]'

方法二。

host = "                   ";

=> 无法从 'const char [20]' 转换为 'char [20]

方法3。

host = '                   ';

=> 无法从 'int' 转换为 'char [20]

方法4。

host = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ;

=> 语法错误:''

...

我在这里感到绝望:C 的发明者如何以及为什么让简单地为变量声明一个值变得如此困难:-(?

【问题讨论】:

你有没有试过用谷歌搜索“c char array initialize”? ***.com/questions/18688971/… 你是如何声明host的? 你不使用单引号作为字符吗?另外,如果你想填充数组,你必须在声明变量时这样做。否则,您必须更改每个单独的元素。 显示你的源代码的相关部分 【参考方案1】:
memset(&host, 0, sizeof(host));

将用零填充它。

【讨论】:

我刚刚使用了这个“memset”命令,它工作正常。谢谢!【参考方案2】:
host = "";

仅当它是 char* 而不是 char[20] 时才有效(如果您正在执行一个函数,只需创建参数 char*)。

host = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ;

没关系,但是先用

'字符', '字符','字符'...

(将字符替换为ASCII的任意字符,例如\0)。

其次(这是这里的主要问题)你有一个不应该在的地方(最后,所以删除它)。

【讨论】:

【参考方案3】:
    你知道initialize的含义吗?通常,它只在定义的时间执行。 declared somewhere outside of my unit,还是说defined

如果host在别处真的是declared,而defining它,你可以使用

char host[20] = 0;   //to fill with 0

char host[20] =  [0 ... 19] = 5 ;  //to fill with 5 , supported on gcc

在以后的任何时候,如果您想将re-initialize 设置为某个值,memset() 是您的最佳选择。查看手册页here。

【讨论】:

char host[20] = 5, ; 将把5 放在数组的第一个位置,并用零完成其余部分。 @axiac 我的坏!不知道我是怎么错过的。抱歉,感谢您引起注意。使用预期代码更新。 不错的技巧,但如果host 是一个字符串(不是小整数数组),我建议[0 ... 18] = '5'; 后跟host[19] = '\0' @AlterMann 感谢先生扩大我的回答范围。【参考方案4】:

我认为您已将主机变量声明为整数变量。如果您已将其声明为 char 变量,

host = "";
host = "     ";

这两个是可能的。因为它会取对应的字符 位置。

host = ' '; 这是不可能的,因为在单引号中我们必须只给出字符。在此您必须提及数组位置,否则会引发错误。 主机[0]=' ';

host = "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ;

这是不可能的,因为在这种情况下,它将采用相应的字符而不是字符串。

【讨论】:

以上是关于在C#中使用默认值初始化字符串数组的3种方式的主要内容,如果未能解决你的问题,请参考以下文章

c语言定义一维数组,元素未初始化,那数组元素默认值是啥

c# 怎样 定义 数组

java类中构造函数中:数组怎样初始化

go语言:数组

数组的学习

c#部分---需要实例化的内容;