Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐式强制转换运算符未在原始程序集外部编译_C#_.net_C# 7.2 - Fatal编程技术网

C# 隐式强制转换运算符未在原始程序集外部编译

C# 隐式强制转换运算符未在原始程序集外部编译,c#,.net,c#-7.2,C#,.net,C# 7.2,隐式强制转换运算符在声明类型的程序集中工作正常,但在引用原始程序集的外部程序/库中使用时却不正常 假设我有这个结构: public readonly struct Tensor { public readonly IntPtr Ptr; // Other stuff here.. public static unsafe implicit operator float*(in Tensor tensor) => (float*)tensor.Ptr.ToPoin

隐式强制转换运算符在声明类型的程序集中工作正常,但在引用原始程序集的外部程序/库中使用时却不正常

假设我有这个结构:

public readonly struct Tensor
{
    public readonly IntPtr Ptr;

    // Other stuff here..

    public static unsafe implicit operator float*(in Tensor tensor) => (float*)tensor.Ptr.ToPointer();
}
当从同一个组件中使用时,此功能非常好,即,我可以:

// Say t is a Tensor
float* p = t;
但是,如果我尝试从另一个程序/任何引用程序集
Tensor
的程序中执行相同的操作,则编译器将无法执行以下操作:

错误CS0029:无法将类型“Tensor”隐式转换为“float*”

奇怪的是Visual Studio在IDE本身中没有显示任何类型的错误,在那里一切看起来都很好:

另外,在错误列表选项卡中,我没有得到任何关于此的错误,我只能通过查看编译器输出控制台来查看这些错误消息

这似乎不对:

  • 为什么在最初的装配中可以正常工作
  • 既然VS没有编译,为什么我在代码中没有从VS得到任何视觉错误指示
谢谢

编辑:这是回购链接,如果有帮助:

Tensor
struct位于NeuralNetwork.NET项目的API\Structs下。你可以在其他任何项目中尝试,隐式转换对我来说总是失败的


编辑#2:我打开了一个问题,这里是链接:

您是否签入了另一个程序集的
允许不安全代码
生成属性?如果没有,我会先试试。似乎和新的“in”修饰符有关,因为如果删除它,编译就很好了。甚至可能是一个bug,所有这些对语言的快速新更改都比以前更频繁地出现。@Evk这很奇怪,我已经将C#7.2设置为解决方案中的所有项目。另外,删除修饰符中的
并不是理想的解决方案,因为每次都会复制所有的struct值。您可能是对的,这可能是编译器的一个bug,并且考虑到
ref-struct
修饰符也有bug,这不会让我感到惊讶。我会尝试报告的,谢谢!当然,我不建议删除它(如果只是暂时的,直到你找到真正的原因,或者如果这是一个错误,它是固定的)。您可以尝试在此处报告:,但请注意,此处有4000个未解决的问题,因此不要期望非常快的回复和修复:)@Evk Woah,以前从未见过有这么多未解决问题的回购交易啊哈,我将尝试在此处报告,并通过VS发送反馈消息,感谢您的建议!