小编Jac*_*rby的帖子

Linq - SelectMany Confusion

根据我从SelectMany的文档中理解,可以使用它来生成1-many关系的(扁平化)序列.

我有以下课程

  public class Customer
  {
    public int Id { get; set; }
    public string Name { get; set; }
  }

  class Order
  {
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string Description { get; set; }
  }
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用查询表达式语法来使用它们

  var customers = new Customer[]
  {
    new Customer() { Id=1, Name ="A"},
    new Customer() { Id=2, Name ="B"},
    new Customer() { Id=3, Name ="C"}
  };

  var orders = new Order[]
  {
    new Order …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects data-structures

81
推荐指数
3
解决办法
8万
查看次数

适用于Google,Yahoo!的OAuth C#Library 推特

我正在寻找一个允许我在ASP.NET/C#应用程序中使用OAuth的库,这样我就可以使用以下OAuth提供程序之一对用户进行身份验证

  1. 谷歌

  2. 雅虎

  3. 推特

我查看了各种开源库,发现存在一个或另一个问题(有些根本不起作用,有些针对一个服务而不是其他服务).我也看过OAuthDotNet,我必须承认,我发现它太复杂,无法弄清楚如何开始使用它,所以我没有真正尝试过.

所以基本上我正在寻找一个简单易用的库,它可以对抗上面提到的提供者(至少).

c# asp.net oauth

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

为什么C#不允许调用base.SomeAbstractMethod

以下是一些讨论代码

  abstract class ClassA
  {
    public abstract void StartProcess();
  }

  class ClassB : ClassA
  {
    public override void StartProcess()
    {      
      Console.WriteLine("ClassB: Render");
    }
  }

  class ClassC : ClassA
  {
    public override void StartProcess()
    {
      base.StartProcess();//This is where the compiler complains
      Console.WriteLine("ClassC: Render");
    }
  }
Run Code Online (Sandbox Code Playgroud)

在每个人都跳下我的喉咙之前,让我说我完全清楚它为什么没有.但有些情况下,能够这样做是有意义的,并且可以防止必须将基类的方法声明为虚拟但具有空实现.

来自Delphi背景,我们可以在Delphi中完成这个并在我们的类设计中使用它.如果你错误地在基类上调用抽象方法(在运行时),你就会得到一个"抽象错误".

然后我希望(Delphi)编译器检查我之前!现在我希望(C#)编译器允许我这样做!这有多奇怪?

问题:编译器/ Jitter难道不能忽略这样的调用并发出警告而不是错误吗?别人看到/感受到这种痛苦吗?

我需要的情况如下:ClassA是库的一部分(无法控制此类)生成ClassC(类似于编译ASP.NET页面或编译Razor View的方式).

但是库的用户可以定义ClassB,然后ClassC将从ClassB而不是ClassA(当它生成时)下降.类似于ASP.NET页面通常从System.Web.UI.Page下载的方式,但是如果您已经定义了自己的"基础"页面和应用程序中的其他页面,那么现在从您的基页继承,那么生成的类将从您的基页下降(转而来自System.Web.UI.Page).

我希望这部分是清楚的.然后看看我提供的代码,我无法获得ClassC的实例来调用ClassB的实现,因为代码gen不知道包含base.StartProcess().

编辑 似乎有些人并不完全得到我写的东西.因此,假设您正在编写代码生成部分,该部分生成从ClassA下降的ClassC.好吧,因为该方法是anstract(在ClassA中),所以无法生成调用StartProcess()的代码行(因为编译器不允许它).因此,如果有人定义了ClassB,代码生成仍然不会调用base.StartProcess().这实际上是ASP.NET MVC视图中发生的事情.

理想情况下,我希望编译器忽略它.它忽略了很多东西,例如在null引用上调用dispose.

我正在尝试进行讨论,而不是鼓吹......

EDIT2 假设我们有一个层次结构,如上面的代码所示,它工作正常.我们现在的机会是,基类ClassA可能有一个实现(将来)StartProcess()后代将调用它.今天实现这一目标的唯一方法是将方法定义为无虚体.但这对我来说感觉有点蠢.

c# oop abstract-class

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