有没有一种通过指定类型来指定类的方法?

时间:2019-04-23 09:23:05

标签: c# oracle asp.net-core

有一个问题。 OracleDataReader可以按类型报告nametypevalue列。

int i = № of column 
string name = reader.GetName(i)
Type fieldType = reader.GetFieldType(i)
reader.GetFieldValue<T>(i)

GetFieldType方法返回字段Type

例如:

Type fieldType = reader.GetFieldType(i)
fieldType.name = System.String

GetFieldValue<T>方法而不是T中,我将类String指定为...

string result = reader.GetFieldValue<string>(i);

下面是我在TypeCode上迭代的代码部分。

有没有一种通过指定类型来指定类的方法?

var result = reader.GetFieldValue<fieldType.class>(i);

using (OracleDataReader reader = cmd.ExecuteReader()) {
      while (reader.Read()) {
        int count = reader.FieldCount;
        string[] rows = new string[count];

        for (int i = 0; i < count; i++) {
          rows[i] = String.Format(@"""{0}"":", reader.GetName(i));
          Type fieldType = reader.GetFieldType(i);

          if (reader.IsDBNull(i)) {
            DBNull nullValue = reader.GetFieldValue<DBNull>(i);
            rows[i] += SerializeOracleValue(nullValue);
          } else {
            switch (Type.GetTypeCode(fieldType)) {
              case TypeCode.Boolean:
                bool boolValue = reader.GetFieldValue<bool>(i);
                rows[i] += SerializeOracleValue(boolValue);
                break;
              case TypeCode.DBNull:
                DBNull nullValue = reader.GetFieldValue<DBNull>(i);
                rows[i] += SerializeOracleValue(nullValue);
                break;
              case TypeCode.Int32:
                int intValue = reader.GetFieldValue<int>(i);
                rows[i] += SerializeOracleValue(intValue);
                break;
              case TypeCode.Decimal:
                decimal decValue = reader.GetFieldValue<decimal>(i);
                rows[i] += SerializeOracleValue(decValue);
                break;
              case TypeCode.DateTime:
                DateTime dateValue = reader.GetFieldValue<DateTime>(i);
                rows[i] += SerializeOracleValue(new DateTimeOffset(dateValue));
                break;
              case TypeCode.String:
                string stringValue = reader.GetFieldValue<string>(i);
                rows[i] += SerializeOracleValue(stringValue);
                break;
              default:
                break;
            }
          }
        }
        Console.Out.WriteLine($"{{{String.Join(",", rows)}}}");
      }
      Console.Out.WriteLine("Empty");
    }

0 个答案:

没有答案