固定長の文字列に関しては、yikes。同等の構成がないため、これは発生しません。JonSkeetまたはAndersHejlsbergが別の方法で知っていて、計量するために呼び出すことができない限り、彼らが方法を知っているとは思いません。
一方、固定長の文字列は絶対に悪魔的です。そのため、.NETには含まれていませんでした。:-)
上記のMapRecオブジェクトをC#で使用できるものに変換する方法を尋ねられた場合は、構造体とクラスのどちらかを選択できます。個人的に、私は構造体が嫌いです。クラスを使用した場合は、セッターとゲッターを使用して、一種のろくでなしの固定文字列を実装できます。この例に見られるように、これは私があなたのタイプMapRecを実装する方法です:
public class MapRec
{
private const int MAX_MAP_NPCS = 25;
private int fixedLength1 = 10;
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value.Length != fixedLength1)
{
if (value.Length < fixedLength1)
{
_name = value.PadRight(fixedLength1);
}
else
{
_name = value.Substring(0,fixedLength1);
// or alternatively throw an exception if
// a 11+ length string comes in
}
}
else
{
_name = value;
}
}
}
// Constructor
public MapRec()
{
Npc = new int[MAX_MAP_NPCS];
NpcSpawn = new SpawnRec[MAX_MAP_NPCS];
}
public long Revision { get; set; }
public byte Moral { get; set; }
public int Up { get; set; }
public int Down { get; set; }
public int Left { get; set; }
public int Right { get; set; }
public string Music { get; set; }
public int BootMap { get; set; }
public byte BootX { get; set; }
public byte BootY { get; set; }
public TileRec[] Tile { get; set; }
public int[] Npc { get; set; }
public SpawnRec[] NpcSpawn { get; set; }
public int TileSet { get; set; }
public byte Region { get; set; }
}
結局、実際に固定長の文字列が必要な場合(そしておそらくMicrosoft.VisualBasic.VBFixedStringAttributeがその仕事をすることができる場合)を除いて、私はそれらから離れることをお勧めします。