小编Ale*_*xis的帖子

C# - 为什么要实现标准的异常构造函数?

从MSDN,代码分析警告CA1032:

Exception types must implement the following constructors: 
  • public NewException()
  • public NewException(string)
  • public NewException(string, Exception)
  • protected or private NewException(SerializationInfo, StreamingContext)
我理解序列化构造函数背后的目的,但是"要求"其他构造函数背后的理由是什么?为什么我不应该只定义对我的异常使用有意义的构造函数?如果我不想在不传递消息的情况下抛出MyException,我该怎么定义无参数构造函数呢?如果我希望MyException具有int属性并且我只想要初始化该属性的构造函数,该怎么办?

c# coding-style exception

34
推荐指数
5
解决办法
6866
查看次数

C#泛型重载 - 编译器无法确定正确的调用

我不明白为什么编译器无法解决在这里使用的正确重载.(下面的代码)只有一个版本的Add()是合适的--BigFoo是一个IFoo,并且没有实现IEnumerable,其中T是一个IFoo.但它坚持要报告歧义.有任何想法吗?我尝试添加第二个泛型类型参数 - 添加其中T:IFoo其中U:IEnumerable.但即使合法使用,过载也完全被忽略.

我知道我可以通过强制转换和指定泛型类型参数解决这个问题,但那时我已经打败了过载的目的.你可以质疑重载,但语义对我来说是正确的 - 我在我的类中实现的行为是Add()将对象批量添加为集合中的单个条目.(第二个Add()不应该是AddRange().)

namespace NS
{
  interface IFoo { }

  class BigFoo : IFoo, IEnumerable<int>
  {
    public IEnumerator<int> GetEnumerator()
    {
      throw new NotImplementedException();
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
      throw new NotImplementedException();
    }
  }

  class FooContainer
  {
    public void Add(IFoo item) { }
    public void Add<T>(IEnumerable<T> group) where T : IFoo { }
  }

  class DemoClass
  {
    void DemoMethod()
    {
      BigFoo bigFoo = new BigFoo();
      FooContainer fooContainer = new FooContainer();
      // error CS0121: The call is ambiguous between the …
Run Code Online (Sandbox Code Playgroud)

c# generics overloading

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

标签 统计

c# ×2

coding-style ×1

exception ×1

generics ×1

overloading ×1