在定義結構體時,很明顯結構體欄位的值不能是結構體本身。此外,當定義 2 個結構并且每個結構具有另一個的欄位型別時,問題實際上是相同的。
但是當不是直接設定型別時,在該型別上使用泛型,為什么這仍然是一個問題?
public struct Generic<T> { }
public struct Test1
{
Generic<Test2> f;
}
public struct Test2
{
Generic<Test1> f;
}
此代碼編譯良好并生成一個 dll。當我嘗試加載 dll 時,我收到“無法加載一種或多種請求的型別..”并僅列出具有上述關系的那些型別。如果我只洗掉其中一個欄位,則加載成功。這是怎么回事以及如何解決這個問題?
我還注意到,只要我有這個回圈的泛型型別,dotnet test explorer 就找不到任何測驗,但我認為這是同樣的問題。
編輯:
上面的代碼可以編譯成一個.dll檔案。然后,從另一個專案我使用 System.Runtime.Loader 動態加載 dll:
public static void Main(string[] args)
{
var context = new AssemblyLoadContext("context");
Assembly assembly = context.LoadFromAssemblyPath("path-to-dll");
Type[] types = assembly.GetTypes();
}
在示例的最后一行,我得到了 ReflectionTypeLoadException。
uj5u.com熱心網友回復:
我同意,這應該有效。但事實并非如此。這是運行時加載型別的已知問題。
解決這個問題顯然需要重寫型別加載方式的核心實作。導致行為的重大變化,可能會影響大部分現有程式。到目前為止,解決這個問題的成本被認為太高,無法證明這樣做是合理的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/370262.html
