我有一个泛型方法,通过将一个操作数强制转换来调用运算符dynamic.有两种不同的电话:
//array is T[][]
//T is MyClass
array[row][column] != default(T) as dynamic
Run Code Online (Sandbox Code Playgroud)
这是工作和调用static bool operator !=(MyClass a, MyClass b)(即使双方都是null).
让我感到惊讶的是以下行的行为:
//array, a and b are T[][]
//T is MyClass
array[row][column] += a[line][i] * (b[i][column] as dynamic);
Run Code Online (Sandbox Code Playgroud)
这个电话
public static MyClass operator *(MyClass a, object b)和
public static MyClass operator +(MyClass a, object b)
而不是
public static MyClass operator *(MyClass a, MyClass b)和
public static MyClass operator +(MyClass a, MyClass b).
删除 …
通过引用将字段传递给非托管的extern方法是否安全?
[StructLayout(LayoutKind.Sequential)]
struct SomeStruct
{
public int SomeValue;
}
class SomeClass
{
SomeStruct _someStruct;
[DllImport("SomeLibrary.dll")]
static extern void SomeExternMethod(ref SomeStruct someStruct);
public void SomeMethod()
{
// Is this safe or do I have to pin the current instance of SomeClass?
SomeExternMethod(ref _someStruct);
}
}
Run Code Online (Sandbox Code Playgroud)