0

我得到这个库,由以前的开发人员内部开发,如下所示

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

    }

}

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

....
....

.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 对象。有点困惑。

谢谢

4

2 回答 2

0

你可以使用委托功能吗?

像这样的事情我想如果我得到你想要/需要的东西。

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

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

于 2013-08-08T15:35:43.100 回答
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”,但看起来没有。

非常感谢各位

于 2013-08-08T15:38:42.460 回答