我遇到以下代码时出现问题,并希望有人可以告诉我它有什么问题。
我给出的错误是:
无法隐式将
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
}
}
思考?感谢您的帮助!
答案 0 :(得分:7)
方法doSomething
和doSomethingElse
的返回类型为T
,而您实际上是在这些方法的正文中返回thisThing<T>
。这些都不一样。
举一个简单的例子,这相当于将List<T>
返回到您期望的T
- 它们是完全不同的类。
答案 1 :(得分:4)
好吧,编译器说:
private T doSomethingElse<T>(string thisString)
需要:
private thisThing<T> doSomethingElse<T>(string thisString)
要编译。
现在修复取决于你想要做什么(一个不使用其参数的方法已经被怀疑)。
答案 2 :(得分:3)
您要做的是将类型thisThing
转换为类型T
,这是不可能的。相反,您需要将doSomethingElse<T>(...)
的返回类型更改为:
private thisThing<T> doSomethingElse<T>(...) { ... }
答案 3 :(得分:3)
thisThing<T>
是一种通用类型,T
作为类型参数。它无法转换为T
。
那就像是说:
List<string> stringList = new List<string>();
string someString = stringList; // Makes no sense.
答案 4 :(得分:2)
对我来说很明显
_thisThing
的类型为thisThing<T>
,但返回类型的类型为T
答案 5 :(得分:2)
您告诉代码该方法的返回类型为T
,并且您尝试返回thisThing<T>
。编译器不知道如何从另一个转换它,所以它向你抱怨它。
您需要更改方法的返回类型或更改方法中返回的内容。
答案 6 :(得分:1)
private thisThing<T> doSomethingElse<T>(string thisString) { }
答案 7 :(得分:0)
您可以更改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
}
}