在本地更改 T 类型 int window

Changing T type int in local window

我无法从本地变量或直接 window 更改此 "value" 变量。 怎么了?运行时不是 int 吗?

我无法更改 _value too.I 认为这是错误还是什么?

    class Program
    {
        static void Main(string[] args)
        {
            Just<int> just = new Just<int>();
            just.Try(5);
        }
    }
    class Just<T>
    {
        private T _value;
        public void Try(T value)
        {
            this._value = value;
        }
    }

Beside using this, tried to use instance of Just, worked fine

这个错误是"normal"。 看起来,调试器没有获得您输入的值 T = int,而只是作为 int(它写在调试器上,它期望一个 int),然后尝试转换你的 intT。即使 Tint 类型,它也不能隐式地进行转换(通常你只需要转换你的值来解决这种错误),它可能会在运行中重新编译你的值用于编译代码的相同配置。并且在此配置中 valueT = unknown 类型,而不是 T = int.

我想即时更改值并不像运行时那样有效。因为在运行时,T = int
(比我更了解 compiler/debugger 行为的人,也许可以向您详细解释这里发生的事情。)


但是就像在这个方法中:

public void Try(int value)
{
    // With _value as T
    _value = value;
}

您最终会收到相同的错误消息(并且无法编译)。

Error CS0029 Cannot implicitly convert type 'int' to 'T'


但是如果您在调试器中将其作为值(对于您的方法)键入:

(T)(object)10 // Or whatever your int value is

或者上面的测试方法(你真的应该避免):

_value = (T)(object)value;

有效,值已更改。 (除非你的值不是 T 类型)
您已明确将 int 转换为 T


没有错,这只是一个标准的非泛型到泛型的转换错误。

这是表达式计算器中的一个已知错误。有一个 GitHub 问题跟踪此错误 here