用委托c#代替Func

本文关键字:代替 Func | 更新日期: 2023-09-27 18:17:18

我们正在尝试将。net 3.5构建的应用程序迁移到。net 2.0(原因是让我们的exe在带有XP等没有3.5的旧机器上运行)

当这样做的时候,所有的事情现在都停留在一个主要问题上,用老式的委托替换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'的方式,它只使用委托。

用委托c#代替Func

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);

具体而言:

public delegate string SomeDelegate(object someObject);
private SomeDelegate someName1;
private static SomeDelegate someName2;
internal SomeDelegate someProperty
{
      get { return someName1?? (someName1= someName2); }
      set { someName1= value; }
}

我相信你可以使用LinqBridge,它定义了。net 3.5中的ActionFunc委托

.Net2.0委托代码如下:

    private delegate void SomeName(object arg1, string arg2);
    SomeName someName1, someName2;
    internal SomeName SomeProperty
    {
        get
        {
            return someName1 ?? (someName1 = someName2);
        }
        set
        {
            someName1 = value;
        }
    }