4

我想将返回 void 作为参数的扩展方法传递给另一个返回动态的扩展方法。

public static void AddTo(this Object entity, Object parent)
{
    parent.GetCollectionOf(entity).Add(entity);
}
public static dynamic And(this Object entity, Action method)
{
    entity.method(parent);
    return entity;
}

我想用这样的东西,

dynamic parent = MakeNew(parentType);    
dynamic entity = MakeNew(type).And(AddTo(parent));

我喜欢将任何 void 方法传递给And()但仍返回它扩展的对象。我希望动态返回类型没有问题。

这种东西的语法是什么?

4

4 回答 4

2

你的问题我说对了吗?

dynamic entity = MakeNew(type).And(() => 
{
  AddTo(parent); 
}); 
于 2011-09-06T13:31:48.190 回答
1

你可以这样做吗?

myObjects
        .Where(d => d.true == true && d.Value == 77)
        .Update(e => { e.Value = 1; e.true = false; } );

小心使用我的 linq,它随时可能爆炸 ;-)

    /// <summary>
    /// Used to modify properties of an object returned from a LINQ query
    /// </summary>
    /// <typeparam name="TSource">The type of the source.</typeparam>
    /// <param name="input">The source</param>
    /// <param name="updater">The action to perform.</param>
    public static TSource Update<TSource>(this TSource input, Action<TSource> updater)
    {
        if (!updater.IsNull() && !input.IsNull())
        {
            updater(input);
        }
        return input;
    }

为了充分解释这一点:

    public DataRow DoSomething(DataRow dataRow)
    {
        //DoSomething
        return dataRow;
    }

    var query = from dataRow in myDataTable.Rows.Cast<DataRow>()
                where
                    Double.TryParse(dataRow["Distance"].ToString(), out distance)
                    && distance > (11) && distance <= 99
                select dataRow.Update(f => DoSomething(f));
于 2012-06-05T00:09:15.367 回答
0

我怀疑你真的想要这个:

public static void AddTo(this Object entity, Object parent)
{
    parent.GetCollectionOf(entity).Add(entity);
}

public static dynamic And(this Object entity, Action<object> method)
{
    method(entity);
    return entity;
}

dynamic entity = MakeNew(type).And(entity => entity.AddTo(parent));

话虽如此,仍然不清楚parent从哪里开始......

于 2011-09-06T13:32:13.093 回答
0

我认为 C# 还不够“动态”来做我认为你想要的事情。

And 方法不起作用,因为entity参数是 type object,所以entity.method(parent)不起作用。即使您定义entity为 type dynamic,C# 也会尝试找到一个名为“method”的方法来调用。您可以在示例中执行此操作:

public static dynamic And(this Object entity, Action method, object parameter) 
{     
      method(entity, parameter);     
      return entity; 
}

dynamic entity = MakeNew(type).And(AddTo, parameter); 
于 2011-09-06T13:37:04.320 回答