我是C#中的新手。我想在C#中創建一個由固定大小的字符串變量組成的結構體。示例尺寸爲[20]的分配器ID。賦予字符串固定大小的確切方法是什麼?在C#中的結構中創建固定大小的字符串?
public struct DistributorEmail
{
public String DistributorId;
public String EmailId;
}
我是C#中的新手。我想在C#中創建一個由固定大小的字符串變量組成的結構體。示例尺寸爲[20]的分配器ID。賦予字符串固定大小的確切方法是什麼?在C#中的結構中創建固定大小的字符串?
public struct DistributorEmail
{
public String DistributorId;
public String EmailId;
}
如果您需要fixed,預先分配的緩衝區String
不是正確的數據類型。
雖然這種使用類型只會在互操作環境中有意義,否則您應該堅持使用String
s。
您還需要使用allow unsafe code
編譯程序集。
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);
}
}
}
如果由於某種原因,你需要固定大小的緩衝區,而不是在互操作方面,你可以使用相同的結構,但沒有unsafe
和fixed
。您將需要自己分配緩衝區。
要牢記的另一個重點是在.NET中,sizeof(char) != sizeof(byte)
。 A char
至少是2個字節,即使它是用ANSI編碼的。
如果我使用char數據類型,我如何給它賦值。當前我正在使用 distributoremail.DistributorId =((int)r [「DistributorId」])。ToString(); – user2841448
@ user2841448我在構造函數中添加了一個用法示例。當然,在構造函數中不需要賦值。 – Rotem
如果您確實需要固定長度,則可以始終使用char[]
而不是字符串。如果您還需要字符串操作,則很容易轉換爲/來自。
string s = "Hello, world";
char[] ca = s.ToCharArray();
string s1 = new string(ca);
需要注意的是,除了一些特殊的COM互操作的情況下,你總是可以只使用字符串,並讓有關的大小和存儲架構的擔心。
您可以通過在創建時指定長度來創建新的固定長度字符串。
string(char c, int count)
此代碼將創建一個長度爲40個字符的新字符串,填充空格字符。
string newString = new string(' ', 40);
作爲字符串擴展,覆蓋源字符串較長和較短thand固定:
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}";
}
爲什麼需要這個? – SWeko
我正在創建一個返回結構的web服務。這種Web服務被稱爲Sybase unwired platform的工具用於創建抽象對象(稱爲MBO或移動業務對象)。但是,當我創建一個類型字符串變量時,在Sybase unwired平臺中創建的變量會給出警告,說明變量的長度未定義。爲了糾正這一點,我將不得不定義我的結構中使用的變量的長度。 – user2841448