使用Action时,C#无法根据用法推断类型参数类型

时间:2016-09-05 11:33:42

标签: c# unity3d monodevelop

假设我有MonoDevelope定位的代码.Net 3.5:

public void TestTemplate<T>(Action<T> action)
{
    // pseudocode
    m_funcDict[typeof(T).GetHashCode()] += action;
}

public void TestUsage(object arg)
{
    TestTemplate(TestUsage);
}

我得到了这样的错误:

  

错误CS0411:方法的类型参数   无法从使用中推断出`TestTemplate(System.Action)'。   尝试明确指定类型参数(CS0411)   (汇编CSHARP)

如果没有手动指定类型参数,有没有办法可以做到这一点?

我想要的只是automatically推断出类型。

1 个答案:

答案 0 :(得分:1)

  

如果没有手动指定类型参数,有没有办法可以做到这一点?

最短的答案是不,你不能

类型推断不能像这样工作。您需要将方法TestTemplate转换为适当的Action类型,以便将其用作GetType()的参数。

但是在您的情况下,您可以使用Type在运行时从参数中提取public void TestTemplate(Action<object> action,Type t) { // pseudocode m_funcDict[t.GetHashCode()] += action; } public void TestUsage(object arg) { Type t = arg.GetType(); TestTemplate(TestUsage,t); } ,并使用它来访问字典中的所需项目。

public class MainActivity extends AppCompatActivity {

    public void narutoFade(View view){
        ImageView naruto =(ImageView) findViewById(R.id.naruto);

        ImageView narutosage =(ImageView) findViewById(R.id.narutosage);


        naruto.animate().alpha(0f).setDuration(2000);
        narutosage.animate().alpha(1f).setDuration(2000);
    }

    public void narutoSageFade(View view) {

        ImageView naruto2 = (ImageView) findViewById(R.id.naruto);
        ImageView narutosage2 = (ImageView) findViewById(R.id.narutosage);

        narutosage2.animate().alpha(0f).setDuration(2000);
        naruto2.animate().alpha(1f).setDuration(2000);

   }
}

希望有所帮助