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】:
我怀疑您是否想要分隔 局部变量,例如 word1
、word2
等。要了解原因,让我们
把这个想法带到荒谬的地步。想象一下,我们有一个与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# 中使用 TaskScheduler 设置“仅在登录时运行”和“运行方式”?
仅在 C# 中的 Date 类型 - 为啥没有 Date 类型?