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#は、私が望むことを実行するのに十分な「動的」ではないと思います。

entityパラメータがタイプobjectであるため、Andメソッドは機能しません。したがって、機能しentity.method(parent)ません。entityタイプを定義した場合でも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 に答える