C# 6 語言規范(ECMA-334 第 6 版)第 6.2.3 節規定:
如果存在從 S 到 T 的顯式參考轉換,則存在從 S[ ] 到 IList<T> 及其基介面的顯式參考轉換...
但是,對于 .NET 6.0 的 VS 2022 (17.3.6) 中的 C# 10.x,以下內容無法編譯:
private const int LENGTH = 4;
public class Source { }
public class Target { public static explicit operator Target(Source _) => new Target(); }
static void Main()
{
_ = (Target)new Source(); // Ok
_ = (IList<Target>)new Source[LENGTH]; // Error, can't convert Source[] to IList<Target>
}
編譯器發出:
錯誤 CS0030:無法將型別“stack_overflow.Program.Source[]”轉換為“System.Collections.Generic.IList<stack_overflow.Program.Target>”
uj5u.com熱心網友回復:
那是因為您擁有的是顯式user-defined conversion運算子。如果存在從型別變數到 的用戶定義的顯式轉換,則存在從型別到S型別的用戶定義的顯式轉換。TST
有關用戶定義的顯式轉換的更多資訊,請查看此處 (§10.5.5)。
Reference conversions另一方面是需要運行時檢查以確保它們正確的參考型別之間的轉換。此處描述了參考轉換(§10.3.5)。
uj5u.com熱心網友回復:
轉換運算子是用戶定義的轉換,而不是參考轉換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519891.html
標籤:C#数组仿制药类型转换
上一篇:如何從結構中獲取特定型別
下一篇:如何檢查和轉換通用型別
