假设我有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
推断出类型。
答案 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);
}
}
希望有所帮助