我正在尝试编写一个使用以下两个参数的方法:
ColumnToSort
ColumnType
我希望能够做到这一点的原因是解释两件事,因为字符串可以给出不同的结果,而不是将相同的两件事作为数字进行比较。例如
String: "10" < "2"
Double: 10 > 2
所以基本上,我希望能够发送double或string数据类型作为方法参数,但我不知道如何做到这一点,但它似乎应该可以在C#中实现。
附录:
我希望我的方法看起来像:
InsertRow(customDataObj data, int columnToSort, DataType dataType){
foreach(var row in listView){
var value1 = (dataType)listView.Items[i].SubItems[columnToSort];
var value2 = (dataType)data.Something;
//From here, it will find where the data object needs to be placed in the ListView and insert it
}
}
如何调用:
I think the above provides enough of an explanation to understand how it will be called, if there are any specific questions, let me know.
答案 0 :(得分:6)
您可以使用Type
作为参数类型。像这样
void foo(object o, Type t)
{
...
}
并致电
Double d = 10.0;
foo(d, d.GetType());
或
foo(d, typeof(Double));
答案 1 :(得分:1)
您可以考虑使用泛型。
InsertRow<T>(T data, int columnToSort){
foreach(var row in listView){
var value1 = (T)listView.Items[columnToSort].SubItems[columnToSort];
var value2 = data;
//From here, it will find where the data object needs to be placed in the ListView and insert it
if(typeof(T)==typeof(string))
{
//do with something wtih data
}
else if(typeof(T)==typeof(int))
{
//do something else
}
}
}
然后调用它,让它自己弄清楚类型。
int i=1;
InsertRow(i,/*column/*);
您可能还想限制T可以是什么,例如,如果您想确保它是值类型,where T:struct
More
答案 2 :(得分:0)
目前还不完全清楚你的目标是什么,但Type
类型可能就是你想要的:
void DoSomethingUseful(Type foo)
{
switch(typeof(foo))
{
case typeof(string):
// something
break;
case typeof(double):
// something else
break;
}
}
DoSomethingUseful(fooObject.GetType());
当然,我的方法名称具有误导性,因为它几乎不可能做任何有用的事情,但希望这是你正在寻找的信息。
答案 3 :(得分:0)
只需传递对Column本身的引用:
protected void DoSort(DataColumn dc)
{
string columnName = dc.ColumnName;
Type type = dc.DataType;
}
干杯, CEC