C#通用方法返回值

我只是在学习generics并且对方法返回值有疑问。

说,我想要一个generics方法,因为方法签名所需的通用部分只是返回值。 该方法将始终采用一个字符串作为其参数,但可以返回double或int。 这可能吗?

实际上我想要一个字符串,解析其中包含的数字(可以是double或int),然后返回该值。

谢谢。

如果没有返回任何其他类型,则不能从generics方法返回doubleint

例如,我可能有一个Foo类,你的通用解析方法没有任何约束,将允许进行这个调用:

 Foo result = Parse("111"); 

使用数字可以做的最好的事情是只允许使用struct (value-types)来约束你的函数。

 T Parse(string value) where T : struct; 

但这将允许所有数字类型,以及任何其他值类型。

您可以通过接口类型进行约束,但是在doubleint上没有INumeric接口,因此您会INumeric

如果传入了错误的类型,你唯一能做的就是抛出exception – 这通常不是很令人满意。

在这种情况下,您最好的方法是放弃generics并使用单独命名的方法。

 double ParseDouble(string value); int ParseInteger(string value); 

但是,当然,这不会帮助你学习generics。 抱歉。

像这样的东西?

 void Main() { int iIntVal = ConvertTo("10"); double dDoubleVal = ConvertTo("10.42"); } public T ConvertTo(string val) where T: struct { return (T) System.Convert.ChangeType(val, Type.GetTypeCode(typeof(T))); } 

是的,这是可能的。

例:

 public T ParseValue(String value) { // ... } 

你可以做点什么……

  public TResult Parse(string parameter) { /* do stuff */ } 

并使用它…

 int result = Parse("111"); 

然后它将取决于您在Parse方法中的实现。

希望能帮助到你。