我有一个记录数据的方法,并使用params关键字
获取大量输入public static void LogData<T>(params object[] parameter)
{
// log out the data
}
我想限制字符串和数字类型的输入,我首先想到的是使用where子句。显而易见的问题是你不能在where子句中使用具体类型,但你可以通过注意到字符串和数字类型都是IComparable和IConvertible来解决这个问题。我认为这可能会有所帮助:
public static void LogData<T>(params T[] parameter)
where T : IComparable, IConvertible
{
// log out the data
}
这不起作用,因为所有输入都必须是一种类型。
有没有办法使用params关键字或其他语法限制字符串和数字类型的输入?
答案 0 :(得分:1)
当每个对象都有ToString
方法时,我不确定为什么要这样做。
无论如何,您可以声明一个新类 - NumberOrString,它将支持字符串的隐式转换以及您想要支持的数字类型。然后让您的LogData方法接受params NumberOrString[] p
答案 1 :(得分:0)
如果你在谈论strings
和 numeric
类型,那是不可能的。如果条件为或,您可以定义optional parameter
类型List<T>
,其中T
是任何选定的数字类型。
答案 2 :(得分:0)
我使用我想支持的类型创建多个基本上都是重载的方法。 可能是代码太多而重复,但基本的“注销数据”例程基本上会在所有重载中重复使用。
答案 3 :(得分:0)
这是一个潜在的解决方案:
public static void LogData(params IConvertible[] parameter)
{
// log out the data
}
虽然我想知道是否有任何理由你需要对象是IComparable或IConvertible,或者你只是想将它们限制为已知类型(即字符串或数字)。我认为zmbq的答案可能是要走的路。或者您甚至可能只想查看对象是否实现了有用的ToString
方法。 Here's a way找出它(不是编译时限制,正如您所期望的那样,但在运行时使用反射)。