相关疑难解决方法(0)

为什么使用显式接口实现来调用受保护的方法?

codeplex中浏览ASP.NET MVC源代码时,我发现有一个类显式实现接口是很常见的.显式实现的方法/属性然后调用具有相同名称的另一个"受保护的虚拟"方法/属性.

例如,

public class MvcHandler : IHttpHandler, IRequiresSessionState 
{
    protected virtual bool IsReusable 
    {
        get 
        {
           return false;
        }
    }

    bool IHttpHandler.IsReusable 
    {
        get 
        {
           return IsReusable;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在确定这种编程的好处是什么.对我来说,我更喜欢隐式实现接口IHttpHandler.

我猜作者只是不希望MvcHandler有一个公共属性IsResuable.仅当MvcHandler的实例被视为IHttpHandler时,才能使用属性IsReusable.不过,我不确定为什么作者这样做.

有谁知道这种界面实现的更多好处?

c# interface implicit explicit-interface

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

如何将字符串列表转换为每个字符都有一个属性的匿名类型

假设我有一个List<string>,其中每个字符串的长度相同。这个长度事先是不知道的,只能通过在运行时检查字符串的 Length 属性(比如第一个,因为它们的长度都相同)来确定。

我想要的是最终得到一组匿名对象,每个对象都有属性 C1、C2 等,每个角色一个。

因此,如果列表中的第一个字符串是“abcd”,那么结果列表中的第一个匿名对象将是...

{
  C1 = "a",
  C2 = "b",
  C3 = "c",
  C4 = "d"
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?我一直在与动态和 ExpandoObjects 作斗争,但还没有设法使它们中的任何一个工作。主要问题似乎是事先不知道属性名称。

我尝试做类似的事情(循环)......

d["C" + i] = str.[j];
Run Code Online (Sandbox Code Playgroud)

...但这不起作用,因为它认为我正在尝试使用数组索引。我收到运行时异常“无法将 [] 索引应用于‘System.Dynamic.ExpandoObject’类型的表达式”

这可以做到吗?

c# dynamic expandoobject

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