小编And*_*nZA的帖子

C#将List <ObjBase>转换为List <Obj>

我为什么不能投出List<ObjBase>List<Obj>?为什么以下不起作用:

internal class ObjBase
   {
   }

internal class Obj : ObjBase
   {
   }   

internal class ObjManager
{
    internal List<Obj> returnStuff()
    {
       return getSomeStuff() as List<Obj>;
    }

    private List<ObjBase> getSomeStuff()
    {
       return new List<ObjBase>();
    }

}
Run Code Online (Sandbox Code Playgroud)

相反,我必须这样做:

internal class ObjBase
   {
   }

internal class Obj : ObjBase
   {
   }

internal class ObjManager
{
    internal List<Obj> returnStuff()
    {
       List<ObjBase> returnedList = getSomeStuff();
       List<Obj> listToReturn = new List<Obj>(returnedList.Count);
       foreach (ObjBase currentBaseObject in returnedList)
       {
          listToReturn.Add(currentBaseObject as Obj);
       }
       return …
Run Code Online (Sandbox Code Playgroud)

c# generics inheritance casting list

26
推荐指数
3
解决办法
6万
查看次数

在C#中从类外部访问私有构造函数

如果我使用私有默认构造函数和具有参数的公共构造函数定义类,如何访问私有构造函数?

public class Bob
{
   public String Surname { get; set; }

   private Bob()
   { }

   public Bob(string surname)
   {
      Surname = surname;
   }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过类上的静态方法访问私有构造函数,如下所示:

public static Bob GetBob()
{
   return new Bob();
}
Run Code Online (Sandbox Code Playgroud)

我认为我可以通过扩展方法访问私有构造函数,因为(根据我的理解)扩展方法被翻译,以便它们看起来是类上的静态方法,但我不能:

static class Fred
{
   public static Bob Bobby(this Bob bob)
   {
      return new Bob();
   }
}
Run Code Online (Sandbox Code Playgroud)

那么,我如何访问私有构造函数?

谢谢


编辑:

我想这样做的原因是我想为我们的某个业务类创建测试,但不允许此类的使用者能够错误地实例化对象.我正在测试它,所以我知道(我希望!)在什么情况下测试会失败.我现在还在测试n00b,所以我的想法可能是也可能不是做事的"错误方式".

我已经改变了我的测试策略,就像这个类的消费者那样做事,即调用公共方法,如果公共方法没问题,假设私有方法没问题.我仍倾向于测试私有方法,但我的老板呼吸了我的脖子上交付:-(

c# constructor visibility default-constructor

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

什么异常可以string = string throw除了System.OutOfMemoryException?

代码:

  public Constructor(string vConnection_String)
  {
     try
     {
        mConnection_String = vConnection_String;
     }
     catch (Exception ex)
     {
        ExceptionHandler.CatchEx(ex);
     }
  }
Run Code Online (Sandbox Code Playgroud)

我认为编程这个的人"只是小心点",但是出于兴趣,可以在这样的字符串赋值行上抛出什么异常?我可以想到System.OutOfMemoryException,但其他人呢?

谢谢

.net c# string exception

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

关于制作通用实用类静态的意见

昨天和今天我一直在阅读的一些内容:

  • (SO)你应该避免静态课吗?
  • (SO)何时在C#中使用静态类 - Mark S. Rasmussen 在这里做了一个很好的评论
  • Singleton vs Static - 来自这里的好评:
    这些差异非常微妙,但它们确实会影响系统在经过多年微妙变化,新功能,增强功能等后的弹性.大多数开发人员不喜欢系统维护,我觉得最大的原因是因为系统并非真正设计为保持.通过结合上面的"单例"模式,我抽象了对象的创建和打字,远离我的核心业务逻辑,这对于长期维护至关重要.
  • Singleton被认为是愚蠢的
  • (SO)单一方法的类 - 最好的方法? - 再一次,Mark S. Rasmussen的一句话:
    要求消费者无缘无故地创建一个类实例; 对静态方法没有任何风险的真实实用程序类是静态方法的优秀案例 - 以System.Convert为例.如果您的项目是一次性的,对未来的维护没有要求,那么整体架构确实不是很重要 - 静态或非静态,并不重要 - 然而,开发速度确实如此.
  • (SO)制作方法所有类中的静态 - 速度现在对我来说不是问题,当来自网站的多个客户端和(可能但不太可能)来自管理应用程序的多个客户端调用时,代码必须正常*正常工作*.

我们(我)正忙着重写我们的主要应用程序,解决方案中的一个项目是"Common",它包含一个类"clsCommon".这个类没有属性,一个私有方法被称为构造函数中的唯一行,然后只是公共方法.

这个类处理的事情(不是真正的方法名称或签名):

  • 复制文件:
    • 拷贝文件
    • DecryptAndCopyFile
  • XML设置文件:
    • GetSpecificXMLValue(查询XML设置文件中的值)
    • SetSpecificXMLValue
    • DeleteSpecificXMLValue
  • 创建目录
  • 将时间戳记作为字符串(`return DateTime.Now.ToString("yyyyMMddHHmmss");`)
  • 传递参数的各种字符串函数
  • 写出日志文件.
  • 检查传递的字符串参数(如果它只包含白名单中的元素)(白名单是`readonly`私有列表,在构造函数中赋值.)

目前,解决方案中的所有其他项目都引用了该项目,并通过以下方式提供对该类的访问:

namespace Us.OtherProjects
{
   public class clsCommon : Us.Common.clsCommon
   {}
}

namespace Us.OtherProjects
{
   public static class clsMain
   {
         public static clsCommon CommonClsClassReferenceForGlobalUsage = new clsCommon();
         . …
Run Code Online (Sandbox Code Playgroud)

.net c# static class instance

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

Visual Studio 2008中的自定义编译器警告

自定义编译器警告
C#:如果源代码中使用某些方法,则在Visual Studio中创建自定义警告,
因为它们处理作者控制下的代码.

我们在我们的软件中使用第三方UI控件套件(DevExpress),我想在有人使用时生成警告MessageBox.Show("blah");而不是XtraMessageBox.Show("blah");

有没有办法做到这一点?

warnings compiler-warnings visual-studio-2008 visual-studio

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