我正在制作一种首先需要“检测”数组数据类型的统计软件。
首先,X [,]是一个 sometype 的数组,可以是所有字符串,全部是双精度,全部是整数或者是所有字符串的组合。
现在,对于每一列X [],我需要知道数据类型。像:
我需要在C#中使用这样的东西。
答案 0 :(得分:1)
所以看来你在这里要做的就是找到这里类型的“最低公分母”。集合中所有项目“是”的派生类型最多。
我们将从这个帮助器方法开始,以获取对象的整个类型层次结构(包括它自己):
public static IEnumerable<Type> BaseClassHierarchy(object obj)
{
Type current = obj.GetType();
do
{
yield return current;
current = current.BaseType;
} while (current != null);
}
现在我们可以获取一系列对象,将每个对象映射到它的层次结构,将所有这些序列相互交叉,然后该结果的第一项是所有其他对象共有的最派生类型:
public static Type MostDerivedCommonType(IEnumerable<object> objects)
{
return objects.Select(o => BaseClassHierarchy(o))
.Aggregate((a,b)=> a.Intersect(b))
.First();
}
答案 1 :(得分:0)
一个简单的想法是你可以尝试转换/解析为不同的类型,如果失败,转到下一个类型。一个非常简单的例子是:
foreach (var element in myArray) {
double parsedDouble; int parsedInt;
var defaultValue = element.ToString();
if (Double.TryParse(defaultValue, out parsedDouble)) {
// you have something that can be used as a double (the value is in "parsedDouble")
} else if (Int32.TryParse(defaultValue, out parsedInt)){
// you have something that can be used as an integer (the value is in "parsedInt")
} else {
// you have something that can be used as an string (the value is in "defaultValue")
}
}
我相信这应该可以让你开始。祝你好运!
注意的
正如其他人所说的那样 - 最好在C#中使用强类型。在大多数情况下,您可以选择单一类型并使用它而不是执行上述检查。