不能将T的对象转换为具体类型

MyD*_*ons 0 c# generics

我正在尝试理解泛型类型.但是,我觉得我对假货感到困惑.

在我的系统上,我想加载一些东西.它是什么并不重要,它可以是任何东西.来电者会知道它是什么.

我的方法是使用界面,界面就是简单的界面

public interface ILoad
{
    void Load<T>(T t);  
}
Run Code Online (Sandbox Code Playgroud)

在我的Bll类中,我有一个方法

public void Start(ILoad load)
{
    load.Load<Survey>(this);     // I'm telling it the type and passing it the object
}

public class FakeLoadForSurvey : ILoad     //this class knows about Survey 
{
    public void Load<T>(T t)
    {
         t = new Survey();            //fails
    {
}
Run Code Online (Sandbox Code Playgroud)

它失败并显示以下错误消息

不能将类型调查转换为T

我希望上面的例子足够清楚.

如何告诉C#T类型Survey(或任何其他类型)?

Cod*_*ter 7

public class FakeLoadForSurvey : ILoad     //this class knows about Survey 
Run Code Online (Sandbox Code Playgroud)

如果实现接口的类知道类型T,则移动T到接口:

public interface ILoad<T>
{
    void Load(T t);  
}

public class FakeLoadForSurvey : ILoad<Survey>
{
    public void Load(Survey t)
    {
         t = new Survey();
    }
}
Run Code Online (Sandbox Code Playgroud)

但请注意,这不会影响传递给的参数Load().

因此,如果某些代码调用它:

var surveyLoader = new FakeLoadForSurvey();
Survey surveyToLoad = null;

surveyLoader.Load(surveyLoader);
Run Code Online (Sandbox Code Playgroud)

然后surveyToLoad还是回来null之后Load().如果您不想要,请将其传递给ref.