Pri*_*nes 25 c# anonymous-types anonymous-function
我需要能够做到这一点:
var getHed = () =>
{
// do stuff
return new { Property1 = value, Property2 = value2, etc...};
};
var anonymousClass = getHed();
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误,表明我需要明确声明getHed.
如何声明Func使得T是我要返回的匿名类型?
如果你好奇我为什么需要这样做,那是因为我使用第三方软件允许自定义代码,但只能在一个方法中使用.这可能变得非常难以管理.我有一个想法,我可以使用匿名方法来帮助保持程序代码的组织.在这种情况下,为了帮助它,我需要一个新类,除了匿名之外我无法定义.
Ser*_*rvy 22
正如匿名类型的情况基本上一样,解决方案是使用泛型方法,以便您可以使用方法类型推断:
public static Func<TResult> DefineFunc<TResult>(Func<TResult> func)
{
return func;
}
Run Code Online (Sandbox Code Playgroud)
你现在可以写:
var getHed = DefineFunc(() =>
{
// do stuff
return new { Property1 = value, Property2 = value2, etc...};
});
Run Code Online (Sandbox Code Playgroud)
使用以下泛型方法让编译器为您推断匿名类型:
public static Func<T> MakeFn<T>(Func<T> f)
{
return f;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var getHed = MakeFn(() => new { Property1 = ..., Property2 = ... });
var anonymousClass = getHed();
// you can now access Porperty1 and Property2
var test = anonymousClass.Porperty1;
Run Code Online (Sandbox Code Playgroud)