これはコンパイル:変換する文字列が
string s = "my string";
unsafe
{
fixed (char* ptr = s)
{
// do some works
}
}
これにはない:
string s = "my string";
unsafe
{
fixed (char* ptr = (char*)s)
{
// do some works
}
}
に型 'string' を変換できません。エラーCS0030: 'のchar *'
c# specの最初の構文を許可するが、2番目の構文を禁止する箇所は見つかりません。あなたはこのことについて話し合ったことを助けて指摘できますか? fixed
声明 -
これがなぜ落とされたのかわかりません - 私には良い質問のようです。何が期待されているか、エラーについてはっきりしていることなどを明確にしてください。 –
Jonが仕様を見ている間に、[実装の側面](http://stackoverflow.com/a/32465407/3764814)を見せてください。要約すると、 'string'オブジェクトへのポインタに関するCLIの* kind *型があり、その代わりに最初のcharへのポインタが与えられます(配列の場合も同様です)。 –
@LucasTrzesniewski BCLのバージョンが異なり、Monoも違う 'string.GetHashCode()'の実装を研究しながら、この質問に遭遇しました。 *いくつかの実装では、非ゼロの 'RuntimeHelpers.OffsetToStringData'が処理の前にポインタ値に追加されます。これは、最初の文字を指しているかどうかがバージョンによって異なることを意味する可能性があります。 –