";无法隐式转换类型';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
}
}
想法?我感谢你的帮助!
方法doSomething
和doSomethingElse
的返回类型为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>
。编译器不知道如何将一个与另一个进行转换,所以它在向你抱怨
您需要更改方法的返回类型,或者更改方法中返回的内容。
我很清楚
_thisThing
是thisThing<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
}
}