小编Lim*_*ing的帖子

方括号在属性中意味着什么?

我正在深入研究MVC 4 WebGrid的代码,我看到它被用作这个

    grid.Column("Id", format: (item) => item.GetSelectLink(item.Id)),
Run Code Online (Sandbox Code Playgroud)

我不确定"item"参数是什么,所以我查看了源代码,看起来它是一个"WebGridRow"类.对我来说问题是,上面的代码正在寻找一个".Id"属性,但它在类中不存在.唯一一个靠近它的地方看起来像是下面的

public object this[string name]
        {
            get
            {
                if (String.IsNullOrEmpty(name))
                {
                    throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "name");
                }
                object value = null;
                if (!TryGetMember(name, out value))
                {
                    throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                      HelpersResources.WebGrid_ColumnNotFound, name));
                }
                return value;
            }
        }
Run Code Online (Sandbox Code Playgroud)

我从未见过像"this [string name]"这样定义的属性,这是什么意思?动态属性?

我试图在网上搜索,但不知道要搜索什么,我无法得出任何结果/解释.

请帮忙.谢谢

c# asp.net-mvc-4

3
推荐指数
1
解决办法
2780
查看次数

如何在不使用"new"关键字的情况下发起课程?

这可能是一个愚蠢的问题,但我正在开发一个组件,我有一个类具有如下属性的类

public class Grid()
{
 ..
 public IDecorator Decorator { get; set;}

}
Run Code Online (Sandbox Code Playgroud)

我想要的是让用户以下列方式指定自己的实现IDecorator的自定义类

...BuildGrid(
grid=>{
..
grid.Decorator =  [CustomNameSpace].[DecoratorClass] 
//as in 
grid.Decorator =  Com.MyCompany.DivDecorator
..
});
Run Code Online (Sandbox Code Playgroud)

Com.MyCompany.DivDecorator实现了IDecorator接口.那么我应该如何在没有最终用户指定"new"关键字的情况下执行此操作

grid.Decorator = new Com.MyCompany.DivDecorator();
Run Code Online (Sandbox Code Playgroud)

我知道我在这里错过了一些关键的c#概念.

谢谢

[编辑]

我试图做像这里的Java DisplayTag库这样的事情

http://www.displaytag.org/1.2/tut_decorators.html

他们这样做的方式是

... decorator="org.displaytag.sample.Wrapper"

所以我想而不是

public IDecorator Decorator { get; set;}
Run Code Online (Sandbox Code Playgroud)

我应该做

public String Decorator (get; set;}
Run Code Online (Sandbox Code Playgroud)

然后在内部使用TypeOf()来解决它....只是想知道是否有任何其他方式优雅地在C#中执行它.

谢谢

c# razor asp.net-mvc-4

2
推荐指数
2
解决办法
3506
查看次数

带有可选通用参数的通用方法

如何使用可选的泛型类型创建泛型方法?这就是我现在所拥有的,这是有效的

 public GridViewColumn<T> Column<D>(String HeaderText, D decorator) where D: IColumnDecorator, new()
        {
            GridViewColumn<T> column = new GridViewColumn<T>();
            column.HeaderText = HeaderText;
            column.Decorator = new D();
            return column;
        }
Run Code Online (Sandbox Code Playgroud)

如您所见,我需要在Column()方法中实例化类型D(实现IColumnDecorator).

问题是,"D"类型是可选的.如果是Null,我想明确使用我拥有的默认ColumnDecorator.就像是

 public GridViewColumn<T> Column<D>(String HeaderText, D decorator) where D: IColumnDecorator, new()
        {
            GridViewColumn<T> column = new GridViewColumn<T>();
            column.HeaderText = HeaderText;
            if(decorator ==null)
            {
               column.Decorator = new DefaultColumnDecorator();
            }
            else{
               column.Decorator = new D();
            }
            return column;
        }
Run Code Online (Sandbox Code Playgroud)

请帮忙.谢谢!

[编辑].

如果我有一个自定义的IColumnDecorator实现,我想在razor MVC中使用它

@Model.[IEnumerable].Grid(grid=>{
      ..
      ...
      grid.columns(
         grid.Column<MyOwnColumnDecorator>("FirstColumn")
      )
});
Run Code Online (Sandbox Code Playgroud)

如果我没有任何想要使用默认值,那么我希望能够做类似的事情

@Model.[IEnumerable].Grid(grid=>{
          ..
          ... …
Run Code Online (Sandbox Code Playgroud)

c# generics

2
推荐指数
1
解决办法
3967
查看次数

正则表达式,在两个单词之间找到一个单词

我有这个字符串

<p/><ul><li>test1<p/></li><li>test2<p/></li></ul><p/>
Run Code Online (Sandbox Code Playgroud)

我尝试做的是提取"li"标签中的所有"p"标签,但不提取其外部的"p"标签.

到目前为止,我只能通过提取所有"li"标签

\<li\>(.*?)\</li\>
Run Code Online (Sandbox Code Playgroud)

我迷失了如何在其中提取"p"标签.

任何指针都非常感谢!!

.net c# regex

1
推荐指数
1
解决办法
5414
查看次数

DynamicObject?以下代码如何工作?

我似乎无法在MVC Webgrid的源代码中将以下代码拼凑在一起.

当我们构建网格列时,我们会说

grid.Column("Id", format: (item) => item.GetSelectLink(item.Id)),
Run Code Online (Sandbox Code Playgroud)

"item"显然是一个lambda参数,它实际上是一个"WebGridRow"类.(我认为!!除非我错了)在这里查看源代码

https://github.com/mono/aspnetwebstack/blob/master/src/System.Web.Helpers/WebGrid/WebGridRow.cs

我的问题是,"Id"不是这个类的属性,并且由于WebGridRow继承自DynamicObject,".Id"属性究竟是如何映射到当前行的"源对象"的?

顺便说一下,源对象"对象值"通过WebGridRow的构造函数传递

public WebGridRow(WebGrid webGrid, object value, int rowIndex)
{
    _grid = webGrid;
    _value = value;
    _rowIndex = rowIndex;
    _dynamic = value as IDynamicMetaObjectProvider;
}
Run Code Online (Sandbox Code Playgroud)

列定义

public Func<dynamic, object> Format { get; set; }
Run Code Online (Sandbox Code Playgroud)

列在"WeBGridRenderer"类中调用为

 foreach (var row in webGrid.Rows)
 {
                     .....
                    foreach (var column in columns)
                    {
                        var value = ...Format(column.Format, row).ToString();
                        ...
                    }
 }
Run Code Online (Sandbox Code Playgroud)

最后,"WeBGridRenderer"中的"格式"函数

private static HelperResult Format(Func<dynamic, object> format, dynamic arg) {
        var result = format(arg); …
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
509
查看次数

标签 统计

c# ×5

asp.net-mvc-4 ×2

.net ×1

generics ×1

razor ×1

regex ×1