在C#中的结构中创建固定大小的字符串?
我是C#的新手。我想在C#中创建一个由固定大小的字符串变量组成的结构。大小为[20]的DistributorId示例。给字符串一个固定大小的确切方法是什么在C#中的结构中创建固定大小的字符串?,c#,C#,我是C#的新手。我想在C#中创建一个由固定大小的字符串变量组成的结构。大小为[20]的DistributorId示例。给字符串一个固定大小的确切方法是什么 public struct DistributorEmail { public String DistributorId; public String EmailId; } 如果您确实需要一个固定长度,您可以始终使用char[]而不是字符串。如果您还需要字符串操作,则很容易转换为/从 string s = "
public struct DistributorEmail
{
public String DistributorId;
public String EmailId;
}
如果您确实需要一个固定长度,您可以始终使用
char[]
而不是字符串。如果您还需要字符串操作,则很容易转换为/从
string s = "Hello, world";
char[] ca = s.ToCharArray();
string s1 = new string(ca);
请注意,除了一些特殊的COM互操作场景外,您始终可以只使用字符串,让框架担心大小和存储。如果需要,预先分配的缓冲区,字符串
不是正确的数据类型
不过,这种用法只有在互操作上下文中才有意义,否则您应该坚持使用String
s
您还需要使用允许不安全代码
编译程序集
unsafe public struct DistributorEmail
{
public fixed char DistributorId[20];
public fixed char EmailID[20];
public DistributorEmail(string dId)
{
fixed (char* distId = DistributorId)
{
char[] chars = dId.ToCharArray();
Marshal.Copy(chars, 0, new IntPtr(distId), chars.Length);
}
}
}
如果出于某种原因需要固定大小的缓冲区,但不是在互操作上下文中,则可以使用相同的结构,但不使用safe
和fixed
。然后您需要自己分配缓冲区
另一个需要记住的要点是,在.NET中,
sizeof(char)!=sizeof(字节)
。char
至少是2个字节,即使它是用ANSI编码的。您可以通过在创建时指定长度来创建新的固定长度字符串
string(char c, int count)
此代码将创建一个长度为40个字符的新字符串,并用空格字符填充
string newString = new string(' ', 40);
作为字符串扩展,包含比固定长度长和短的源字符串:
public static string ToFixedLength(this string inStr, int length)
{
if (inStr.Length == length)
return inStr;
if(inStr.Length > length)
return inStr.Substring(0, length);
var blanks = Enumerable.Range(1, length - inStr.Length).Select(v => " ").Aggregate((a, b) => $"{a}{b}");
return $"{inStr}{blanks}";
}
为什么需要这个?我正在创建一个返回结构的Web服务。这个web服务由一个称为Sybase unwired platform的工具使用,以创建抽象对象(称为MBO或移动业务对象)。但是,当我创建字符串类型的a变量时,在Sybase unwired platform中创建的变量会发出警告,表示变量长度未定义。为了纠正这个错误,我必须定义结构中使用的变量的长度。若我使用char数据类型,我如何给它赋值。当前我正在使用distributoremail.DistributorId=((int)r[“DistributorId”]).ToString()@user2841448我在构造函数中添加了一个用法示例。当然,在构造函数中不需要进行赋值。