我将尝试通过一个示例来解释我的问题:
class V<T>
{
public readonly Func<T> Get;
public readonly bool IsConstant;
V(Func<T> get, bool isConstant)
{
Get = get;
IsConstant = isConstant;
}
public static implicit operator V<T>(T value)
{
return new V<T>(() => value, true);
}
public static implicit operator V<T>(Func<T> getter)
{
return new V<T>(getter, false);
}
}
void DoSomething<T>(V<T> v)
{
//...
}
void Main()
{
DoSomething<string>("test"); // (1) type inference is not working
DoSomething<string>((V<string>)(() => "test")); // (2) implicit operator does not work
}
在方法Main
中,我有两种情况:
- 我必须明确指定
<string>
方法的通用参数DoSomething
。 - 在这里,我必须添加显式强制转换
(V<string>)
,隐式运算符似乎不起作用。
为什么需要这个?编译器正在考虑哪些替代方案,因此无法选择正确的方法?