Closed ufcpp closed 6 years ago
そういえば、↓こういう挙動の説明もどこにもない。足した方がいいかも。 要は、null or empty の時に null ポインターが変える。empty でも。
using System;
class Program
{
static void Main()
{
X(default(byte[])); // false
X(new byte[0]); // false
X(new byte[1]); // true
X(default(string)); // false
X(""); // false
X("a"); // true
}
unsafe static void X(byte[] array)
{
fixed (byte* p = array)
{
Console.WriteLine(p != null);
}
}
unsafe static void X(string array)
{
fixed (char* p = array)
{
Console.WriteLine(p != null);
}
}
}
これに合わせて GetPinnableReference も「null ポインター相当の ref を返す」という挙動を求められるんだけど…
通常の手段でそれは不可能。現状だと、Unsafe.As(null)
が必要になる。
VS 15.7 preview 3 の時点でまだできてないんだけど…
https://github.com/ufcpp/UfcppSample/blob/master/Demo/2018/Csharp7_3-0309/ConsoleApp1/Fixed/CustomFixed.cs
http://ufcpp.net/study/csharp/sp_unsafe.html#fixed ここに。
ref T GetPinnableReference()