我正在构建一个简单的自定义轻量级 csv 生成器类,奇怪的是,CsvWriter<T>
。
此类的工作方式是,它将自动从所有公共属性生成 csv 到基础Stream
,这些公共属性标记有我们恰当地命名为{{1}的预定义属性}。
在创建对象时,我想检查泛型类型是否实现了至少一个具有预定义CsvPropertyAttribute
的公共属性。如果那不是&#39;我希望抛出异常,因为泛型类型参数不是真正有效。
出现的问题如下:
CsvPropertyAttribute
或类似的mehtod(延迟初始化)。WriteLine(T record)
留空是否更好?我无法将泛型参数约束为有效类型。csv
似乎更合适,但仍然不太正确。谢谢。
答案 0 :(得分:2)
您甚至可以从类构造函数(又名static constructor)中抛出异常。这样,您每T
只能进行一次检查/初始化。
如果类构造函数对CsvWriter<Foo>
失败,则您甚至无法调用CsvWriter<Foo>
的构造函数。
如果您担心正确的参数输入,可以创建自定义异常类型。这是最干净的解决方案。但是我不会那么担心,因为如果你使用类构造函数,你的异常将以TypeInitializationException
的方式包装。
答案 1 :(得分:1)
这实际上应该是编译时错误,但语言并不支持它。
1:是的,继续并投入构造函数。这种快速失败的技术将使您运输错误代码的可能性降低。
2:尽快投掷。不要创建文件。
3:我创建了InvalidOperationException
的子类。你可能会想到更好的东西。
另外,我强烈建议不仅要为这个类编写单元测试,还要为任何其他实例化它的代码编写单元测试。
您可能还想重新考虑您的设计。也许是一个界面,为您提供基础知识。