C#中的固定字符串大小

6

简短问题: 在C#中是否可以创建固定大小的字符串? 我知道在VB中,可以声明像这样的内容:str AS string * 20

详细描述: 我需要读取一个包含20个字节的字段的二进制文件到一个字符串中。我将文件的内容读入一个对象(类)中。我想在类定义中限制字符串的长度。

非常感谢您的关注。

roi


你是如何读取文件的? - SLaks
那只能在 VB 6 中运行。在 VB.NET 中是不可能的,因为 CLR 不支持定长字符串。你为什么需要限制大小呢?如果你要读取的文件只有20个字节,那么生成的字符串就只会有这么长。 - Cody Gray
我没有在问题中提及所有的问题,以限制我的问题文本:该文件是二进制文件,包含菜单项的详细信息:大小(长整型),BasicButtonHeight(长整型),BasicBurronWidth(长整型),行(长整型),列(长整型),ImagesPath(20字节长的字符串)和LabelsFilePath(也是20字节长的字符串)。该文件是为VB6应用程序编写的,我需要将数据转换为C#应用程序。 - roishabtai
4个回答

5

您可以声明并填充一个固定大小的字符数组,然后将其传递给String对象的构造函数,从而生成该字符串。

var newString = new string(theCharArray);


4

您需要创建一个类型为string的属性,它在setter中检查value.Length并将其截断或抛出异常。


我了解在C#中直接声明固定大小的字符串是不可能的。 - roishabtai
声明一个固定长度的字符串实际上是没有意义的。字符串就是字符串,你在干什么? - SLaks
我正在尝试将为VB6应用程序创建的二进制文件提取为C#对象。 - roishabtai
2
@SLaks 仅仅因为编程语言/环境不支持固定长度字符串并不意味着这种做法“没有意义”。在许多应用场景中,固定长度字符串是正确的工具,而使用可变长度字符串会给每个接触该对象的程序员增加额外负担,需要他们“做对”。 - Dale Wilson
@DaleWilson:没错;我的意思是它在CLR类型系统内没有意义。 - SLaks

1
你应该使用'StringBuilder'来解决你的问题。

StringBuffer是Java中的类,而在C#中则是StringBuilder。 - Michael Low
实际上,在Java和C#中都是使用StringBuilder。StringBuffer是Java的旧版本,具有同步功能的StringBuilder。 - atamanroman
StringBuffer 在 MSVC++ 环境中肯定存在(可能有点过时)。无论如何,在我看来,这并不是非常重要的,因为所有这些类都提供大致相同的语义,主要区别在于兼容性。 - iehrlich
能详细说明一下如何使用 StringBuilder 实现吗? - R. Martinho Fernandes

1

谢谢 - 但我想使用“纯”C#对象。 - roishabtai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接