C# 为什么这段代码没有编译?

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

我在函数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> 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

静态类不能包含实例方法。

很好的捕获。我完全错过了。