C# 仅在存在时使用数组

Posted

技术标签:

【中文标题】C# 仅在存在时使用数组【英文标题】:C# only use arrays if it exists 【发布时间】:2021-02-19 01:28:37 【问题描述】:

我是编程初学者。而现在我面临着一个我无法再进一步的任务。可能比较容易解决。

这就是我想做的:我读出了一个.txt文件,里面有几行内容。

.txt 文件中的内容示例:

text1,text2,text3
text1,text2,
text1,text2,text3,text4

我现在已经准备好找到正确的线路并使用它。然后我想拆分行并将每个文本分配给它自己的字符串。

如果我知道这一行有 4 个单词,我可以这样做。但是如果我不知道这行有多少个单词怎么办。

例如,如果我想分配 5 个字符串,但列中只有 4 个数组,则会出现错误。

我的程序目前如下所示:

string reader = "text1,text2,text3,text4";
string[] words = reader.Split(',');

string word1 = words[0].ToString();
string word2 = words[1].ToString();
string word3 = words[2].ToString();
string word4 = words[3].ToString();

textBox1.Text = word3;

我的目标是找出字符串中有多少个单词。然后将每个单词传递给一个单独的字符串。

提前谢谢你

【问题讨论】:

不要考虑尝试分配给单独的变量-您已经有一种访问每个字符串的方法-例如words[2] 使您可以访问第三个字符串。 (另外,对于已经是字符串的东西,无需ToString() 查看words.Length可以查看一行有多少字 老实说,您可能希望将字符串保存在数组中。 如果数组有 1234 字样(假设我提供了一个小旁白)怎么办?你真的想要1234 局部变量吗? 【参考方案1】:

要获取Array的长度,可以很方便的使用.Length

在您的示例中,您只需编写

int arraylength = words.Length;

我不明白,为什么要为字符串数组的每个值创建一个新字符串?您可以在数组中使用它们。

在您的示例中,您始终使用 .ToString(),这不是必需的,因为您已经有一个字符串。

数组只是连接到另一个的多个变量(在您的示例字符串中)。

【讨论】:

是的,你是对的,谢谢你的回答。我可以使用我拥有的数组。但最后我只想花尽可能多的arrys。也许使用控制台示例会更容易。代码:string reader = "text1,text2,text3,text4"; string[] words = reader.Split(',');字符串 word1 = words[0].ToString();字符串 word2 = 单词[1].ToString();字符串 word3 = 单词[2].ToString();字符串 word4 = 单词[3].ToString();输出窗口:text1 text2 text3 text4 但如果我只有 3 或 5 个字符。我要么不显示所有内容,要么得到一个错误,因为第 5 个不存在。 @Alex 所以请检查words.Length,除非words 包含至少6 个元素,否则不要尝试访问words[5] 使用循环显示它们。示例: for(int i = 0; i 【参考方案2】:

我怀疑您是否想要分隔 局部变量,例如 word1word2 等。要了解原因,让我们 把这个想法带到荒谬的地步。想象一下,我们有一个与1234小旁白 只字。我们真的要创建word1, word2, ..., word1234 局部变量吗?

所以,让我们只使用一个 words 数组:

  string[] words = reader.Split(',');

现在,您可以轻松获取数组Length(即项目数):

  textBoxCount.Text = $"We have words.Length words in total";

或者从words 数组中获取第 N 个word(让N 基于一个):

  string wordN = array.Length >= N ? array[N - 1] : "SomeDefaultValue";

在你的情况下(3d word)它可以是

  // either 3d word or an empty string (when we have just two less words) 
  textBox1.Text = array.Length >= 3 ? array[3 - 1] : "";

从技术上讲,您可以使用 Linq 并查询reader 字符串:

  using System.Linq;
  
  ...

  // 3d word or empty string
  textBox1.Text = reader.Split(',').ElementAtOrDefault(3 - 1) ?? "";

但 Linq 似乎在这里过头了。

【讨论】:

以上是关于C# 仅在存在时使用数组的主要内容,如果未能解决你的问题,请参考以下文章

C# 比较两个包含小写文本的 byte[] 数组

如何在 C# 中使用 TaskScheduler 设置“仅在登录时运行”和“运行方式”?

仅在 C# 中的 Date 类型 - 为啥没有 Date 类型?

C# 使用 NetworkStream 进行异步读写

在 C# 中使用“Regex”检查字符串数组中是不是存在元素

String.Split 仅在 C# 中的第一个分隔符上?