C# 为什么这段代码没有编译?
我在函数Doit(我运行的是.Net 3.5)中的代码中遇到这些错误: 错误1:C# 为什么这段代码没有编译?,c#,C#,我在函数Doit(我运行的是.Net 3.5)中的代码中遇到这些错误: 错误1:与“LoadPref(string,System.Func,A)”匹配的最佳重载方法具有一些无效参数 错误2:参数“2”:无法从“方法组”转换为“System.Func” class A : SomeObject { } static class Utilities { private T LoadPref<T>( string key, Func<string, T> loade
与“LoadPref(string,System.Func,A)”匹配的最佳重载方法具有一些无效参数
错误2:
参数“2”:无法从“方法组”转换为“System.Func”
class A : SomeObject
{
}
static class Utilities
{
private T LoadPref<T>( string key, Func<string, T> loaderFunc, T defaultValue )
{
if ( Prefs.HasKey( key ) )
{
return loaderFunc( Prefs.GetString( key ) );
}
return defaultValue;
}
private T LoadAsset<T>( string assetPath ) where T : SomeObject
{
return (T)LoadAssetInSomeWay( assetPath );
}
private void Doit()
{
A asset = LoadPref<A>( "key", LoadAsset, null );
}
}
A类:SomeObject
{
}
静态类实用程序
{
私有T LoadPref(字符串键,Func loaderFunc,T defaultValue)
{
if(首选HasKey(键))
{
返回loaderFunc(Prefs.GetString(key));
}
返回默认值;
}
私有T LoadAsset(字符串assetPath),其中T:SomeObject
{
以某种方式返回(T)装载资产(资产路径);
}
私有无效Doit()
{
A资产=LoadPref(“key”,LoadAsset,null);
}
}
有人知道怎么回事吗?您需要将
LoadAsset
更改为LoadAsset
,以使泛型正常工作。当您调用LoadPref
时,传入LoadAsset
,而不仅仅是LoadAsset静态类不能包含实例方法。很好的捕获。我完全错过了。