gpt4 book ai didi

c# - 为什么在泛型方法中不调用显式运算符

转载 作者:太空狗 更新时间:2023-10-30 00:15:28 25 4
gpt4 key购买 nike

我已将这个问题提炼为我能想到的最简单的代码示例。为什么不从泛型方法中调用显式运算符?

class Program
{
static void Main(string[] args)
{
A a = new A();
B b = (B)a; // works as expected
b = Cast<B>(a);
}

static TResult Cast<TResult>(object o)
{
return (TResult)o; // throws Invalid Cast Exception
}
}

class A
{
}

class B
{
public static explicit operator B(A a)
{
return new B();
}
}

最佳答案

因为通用方法有一组 IL,基于TResult .它不会为每个调用者执行不同的 IL。和通用 TResult 没有任何运算符。

此外:此处的运算符需要介于 object 之间和 TResult ,并且您无法定义涉及 object 的运算符.

例如:Cast<int>Cast<string>Cast<Guid>都有完全相同的 IL。

你可以用dynamic作弊:

return (TResult)(dynamic)o;

关于c# - 为什么在泛型方法中不调用显式运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14246211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com