";无法隐式转换类型';thisMethod<;T>';到';T'&”;

本文关键字:thisMethod lt gt 转换 quot 类型 | 更新日期: 2023-09-27 18:20:36

我对下面的代码有问题,希望有人能告诉我它出了什么问题。

我得到的错误是:

无法将类型ThisThing<T>隐式转换为T

我的代码:

class ThisThing<T>
{
    public string A { get; set; }
    public string B { get; set; }
}
class OtherThing
{
    public T DoSomething<T>(string str)
    {
        T foo = DoSomethingElse<T>(str);
        return foo;
    }
    private T DoSomethingElse<T>(string str)
    {
        ThisThing<T> thing = new ThisThing<T>();
        thing.A = "yes";
        thing.B = "no";
        return thing; // This is the line I'm given the error about
    }
}

想法?我感谢你的帮助!

";无法隐式转换类型';thisMethod<;T>';到';T'&”;

方法doSomethingdoSomethingElse的返回类型为T,而实际上是在这些方法的主体中返回thisThing<T>。这些不一样。

举个简单的例子,这相当于返回List<T>,而您只期望返回T——它们是完全不同的类。

编译器说:

private T doSomethingElse<T>(string thisString)

需要:

private thisThing<T> doSomethingElse<T>(string thisString)

以便进行编译。

现在,修复取决于你想做什么(一个不使用其参数的方法已经是可疑的)。

您要做的是将类型thisThing转换为类型T,这是不可能的。相反,您需要将doSomethingElse<T>(...)的退货类型更改为:

private thisThing<T> doSomethingElse<T>(...) { ... }

thisThing<T>是以T为类型参数的泛型类型。它无法转换为T

这就像是说:

List<string> stringList = new List<string>();
string someString = stringList;   // Makes no sense.

您已经告诉代码该方法的返回类型是T,并且您正试图返回一个thisThing<T>。编译器不知道如何将一个与另一个进行转换,所以它在向你抱怨

您需要更改方法的返回类型,或者更改方法中返回的内容。

我很清楚

_thisThingthisThing<T>类型,但返回类型是T

类型
private thisThing<T> doSomethingElse<T>(string thisString) { }

您可以像下面的代码一样更改otherThing类代码,然后尝试

class otherThing 
    {
        public otherThing() 
        {
        }
        public thisThing<T> doSomething<T>(string thisString)
        {
            thisThing<T> foo = doSomethingElse<T>(thisString); 
            return foo; 
        }
        private thisThing<T> doSomethingElse<T>(string thisString)
        {
            thisThing<T> _thisThing = new thisThing<T>(); 
            _thisThing.A = "yes";
            _thisThing.B = "no"; 
            return _thisThing; //This is the line I'm given the error about 
        }
    }