用代理C#替换Func

时间:2013-06-07 10:44:38

标签: c# .net .net-3.5 .net-2.0

我们正在尝试将.NET 3.5内置的应用程序移动到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',只需使用代表即可。 提前谢谢。

4 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:0)

具体做法是:

public delegate string SomeDelegate(object someObject);

private SomeDelegate someName1;
private static SomeDelegate someName2;

internal SomeDelegate someProperty
{
      get { return someName1?? (someName1= someName2); }
      set { someName1= value; }
}

答案 2 :(得分:0)

我相信您可以使用LinqBridge来定义.Net 3.5中的ActionFunc代表

答案 3 :(得分:0)

.Net2.0带代理的代码如下所示:

    private delegate void SomeName(object arg1, string arg2);
    SomeName someName1, someName2;

    internal SomeName SomeProperty
    {
        get
        {
            return someName1 ?? (someName1 = someName2);
        }
        set
        {
            someName1 = value;
        }
    }