[英]C# dynamic parameter of a function changes it return type
一個簡單的代碼
dynamic v = "";
var a = F("");
var b = F(v);
static bool F(dynamic o) => true;
變量a的類型是bool,但是b是動態的而不是bool,為什么?
簡短的回答是,一旦您聲明了dynamic
, dynamic
“行為”(?)將繼續通過所有未來的引用傳播,直到您明確解決它。
並不是F(o)
的返回類型發生了變化,而是編譯器根本不在乎。
dynamic
變量的聲明已禁用編譯時對該變量的所有引用的類型檢查......再次,直到(或除非)它被明確解決。
但是,我期待閱讀其他解釋。
對於有效的 C# 編譯器,“變量 a 的類型是 bool,但 b 是動態而不是 bool”的初始斷言是不正確的,也沒有用代碼說明。
以下程序將無法編譯,表明 b 確實是一個bool
見https://dotnetfiddle.net/E6fn0P運行代碼。
using System;
public class Program
{
public static void Main()
{
static bool F(dynamic o) => true;
dynamic v = "";
var a = F("");
var b = F(v);
_ = b.Foo;
Console.WriteLine("Hello World");
}
}
預期的編譯器錯誤是:
編譯錯誤(第 12 行,第 13 列): “bool”不包含“Foo”的定義,並且找不到接受“bool”類型的第一個參數的可訪問擴展方法“Foo”(您是否缺少 using 指令或裝配參考?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.