Отправка DataType в качестве аргумента? - PullRequest
5 голосов
/ 11 апреля 2011

Я пытаюсь написать метод, который использует следующие два аргумента:

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 ]

6 голосов
/ 11 апреля 2011

Вы можете использовать Type в качестве типа параметра. как это

void foo(object o, Type t)
{
 ...
}

и звоните

Double d = 10.0;
foo(d, d.GetType());

или

foo(d, typeof(Double));
1 голос
/ 11 апреля 2011

Возможно, вы захотите использовать дженерики.

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 Подробнее

0 голосов
/ 11 апреля 2011

Просто передайте ссылку на сам столбец следующим образом:

 protected void DoSort(DataColumn dc)
      {
         string columnName = dc.ColumnName;
         Type type = dc.DataType;
      }

Ура, ЦИК

0 голосов
/ 11 апреля 2011

Не совсем ясно, какова ваша цель здесь, но тип Type может быть тем, что вы ищете:

void DoSomethingUseful(Type foo)
{
    switch(typeof(foo))
    {
        case typeof(string):
            // something
            break;
        case typeof(double):
            // something else
            break;
    }
}

DoSomethingUseful(fooObject.GetType());

Конечно, имя моего метода вводит в заблуждение, поскольку это практически невозможночтобы сделать что-нибудь полезное, , но, надеюсь, это информация, которую вы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...