在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种方式的主要内容,如果未能解决你的问题,请参考以下文章