用委托 C# 替换 Func
Posted
技术标签:
【中文标题】用委托 C# 替换 Func【英文标题】:Replacing Func with delegates C# 【发布时间】:2013-06-03 15:35:30 【问题描述】:我们正在尝试将构建在 .NET 3.5 中的应用程序迁移到 2.0(原因是让我们的 exe 在没有 3.5 的 XP 等旧机器上运行)
虽然这样做,但现在一切都停留在一个主要问题上,用老式的委托替换 Func(因为 Func 在 2.0 上不可用)。要替换的代码是这样的。
private Func<object, string> someName1;
private static Func<object, string> someName2;
internal Func<object, string> someProperty
get return someName1?? (someName1= someName2);
set someName1= value;
请一些人帮助我创建“someProperty”,就像它只使用委托一样。 提前致谢。
【问题讨论】:
【参考方案1】:public delegate void Action();
public delegate void Action<T>(T t);
public delegate void Action<T, U>(T t, U u);
public delegate void Action<T, U, V>(T t, U u, V v);
public delegate TResult Func<TResult>();
public delegate TResult Func<T, TResult>(T t);
public delegate TResult Func<T, U, TResult>(T t, U u);
public delegate TResult Func<T, U, V, TResult>(T t, U u, V v);
public delegate TResult Func<T, U, V, W, TResult>(T t, U u, V v, W w);
【讨论】:
请注意,.NET 2.0 did 的Action<T>
委托只有一个泛型类型参数(您的第二行)。所有其他的都“丢失”了,所以可以在用户代码中引入。【参考方案2】:
具体来说:
public delegate string SomeDelegate(object someObject);
private SomeDelegate someName1;
private static SomeDelegate someName2;
internal SomeDelegate someProperty
get return someName1?? (someName1= someName2);
set someName1= value;
【讨论】:
【参考方案3】:我相信您可以使用 LinqBridge,它定义了来自 .Net 3.5 的 Action
和 Func
代表
【讨论】:
【参考方案4】:.Net2.0 带有委托的代码如下所示:
private delegate void SomeName(object arg1, string arg2);
SomeName someName1, someName2;
internal SomeName SomeProperty
get
return someName1 ?? (someName1 = someName2);
set
someName1 = value;
【讨论】:
以上是关于用委托 C# 替换 Func的主要内容,如果未能解决你的问题,请参考以下文章