我正在使用这个库,由以前的开发人员内部开发,如下所示
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对象。有点困惑。
谢谢
答案 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”的方法,但看起来并非如此。
非常感谢你们