【发布时间】:2013-08-08 15:05:35
【问题描述】:
我正在获取这个库,它由以前的开发人员在内部开发,如下所示
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 对象。有点困惑。
谢谢
【问题讨论】:
-
您提供了一个
Action<T>,它提供了一个Dictionary<String, Func<T, String>>,其中T是为类的初始化提供的任何内容:MyClass m = new MyClass(),我确定它不会像您一样编译在这种情况下没有指定T。 -
不幸的是,我不熟悉“剃刀视图”这个词。但是那部分显示的语法在我看来就像一个普通的 C# lambda 函数。你不能把同样的代码粘贴到你的“??????”中
-
@Liming 如果您的
foreach中的T是我上面提到的类型的字典,那么您不能单独将它作为参数传递,该方法需要一个委托。试试 lambda:m.AttributesUsing(item => item.Clear()); -
亚当,你是对的。抱歉,我在这里发布简化版本时错过了部分。修改了原代码。
-
类似
m.setAttributesUsing(new Action<Dictionary<string, Func<int, string>>>(func => { /* Do something here */ }));?
标签: c# generics dictionary