将DataType作为参数发送?

时间:2011-04-11 18:17:02

标签: c# methods types

我正在尝试编写一个使用以下两个参数的方法:

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. 

4 个答案:

答案 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