显然,为您自己的解决方案实现以下接口会非常简单
public interface IParsable<T>
{
T Parse(string s);
}
public interface ITryParsable<T> : IParsable<T>
{
bool TryParse(string s, out T output);
}
在编写解析未知类型用户输入数据的各种方法之后,我会发现有int
,decimal
等等,实现这些接口必不可少的版本。
对我而言,包含在System
命名空间中似乎是一件相当明显的事情。
显然事实并非如此。那么看一个类是否“实现”这些接口的最佳方法是什么呢?
通过Duck Typing检查方法是否存在似乎是一种明智的替代方案,但反射并不是非常有效。
答案 0 :(得分:5)
由于C#不支持静态接口,因此您必须拥有该对象的实例才能调用parse方法。你最终会得到这样的东西:
var a = new int().Parse<int>("123");
var b = 123.Parse("567");
或者使用TryParse
方法,事情变得更加奇怪:
int x;
if (x.TryParse("456", out x))
// trippy... now imagine that x is a reference type...