如何使用Func作为参数调用Dictionary对象?

时间:2013-08-08 15:05:36

标签: c# generics dictionary

我正在使用这个库,由以前的开发人员内部开发,如下所示

public MyClass<T>
{
    public Dictionary<String, Func<T,String>> AttributesUsing{ get; set;}
    public void  setAttributesUsing(Action<Dictionary<String, Func<T, String>>> t)
    {
                AttributesUsing = new Dictionary<String, Func<T, String>>();
                t(AttributesUsing);

    }

}

在剃刀视图中,我们可以像这样调用组件

....
....

.setAttributesUsing(attr =>
{
    attr.Add("width", item => (item.ActualDays * 19).ToString());
});

....

问题是在后端代码中他还没有完成,我们怎么称呼它?

以下是相关的文章

foreach(T item in DataSource)
{
      MyClass<T> m = new MyClass<T>()
      m.AttributesUsing(???????)  <---- what do i pass in here?
}

我试图像这样传递T对象

m.AttributesUsing(item) 

但很明显这是不行的。获取“不能像方法一样使用”,因为它是一个Dictionary对象。有点困惑。

谢谢

2 个答案:

答案 0 :(得分:0)

你能使用委托功能吗?

类似这样的东西,我想如果我得到你想要/需要的东西。

public delegate string readDictionary(T obj)
{
    //do some stuff, read attributes
    //return object attributes
}

这样你就不会传递一个对象(有点)并从属性中获取返回的属性for attributesUsing()

答案 1 :(得分:0)

没关系。想通了。由于Func返回一个字符串,所以在“MyClass”中,我只是声明了另一个属性来“保持”最终值

public Dictionary<String, String> Attributes;

并在调用代码中循环遍历它并像这样调用

foreach(T item in DataSource)
{
      MyClass<T> m = new MyClass<T>()
      foreach (KeyValuePair<String, Func<T, String>> pair in m.AttributesUsing)
      { 
            m.Attributes = new Dictionary<String, String>();
            m.Attributes.Add(pair.Key, pair.Value(item));
      }
}

我认为在调用时有一种更容易传入“T”的方法,但看起来并非如此。

非常感谢你们