gpt4 book ai didi

c# - 将 `Type` 转换为 `Nullable`

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:05 25 4
gpt4 key购买 nike

我正在读取一组结果,但遇到了数据库可能返回类型的可空版本的问题,例如 doubleint .

我想知道是否可以使用阅读器的模式信息将类型定义转换为可为空的版本。例如double?int?

抛开所有 SQL 的东西不谈,有没有一种方法可以进行这种类型转换?来自Type反对 Nullable<Type> .

using (SqlConnection connection = new SqlConnection("... connection string here ..."))
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = ".... some sql here ....";

var results = new DataTable(schema.TableName);

using (var reader = await command.ExecuteReaderAsync())
using (var schema = reader.GetSchemaTable())
{
for (int i = 0; i < schema.Rows.Count; i++)
{
var name = (string)schema.Rows[i]["ColumnName"];
var type = (Type)schema.Rows[i]["DataType"];
var allowNulls = (bool)schema.Rows[i]["AllowDBNull"];

if (allowNulls)
{
// --- How do we turn `type` into a nullable version?
// Int32 => Nullable<Int32>
// Double => Nullable<Double>
// ... etc ...
}

var column = new DataColumn(name, type);
results.Columns.Add(column);
}
}
}

最佳答案

请使用以下功能:

public Type GetNullableTypeFrom(Type type)
{
if (!type.IsValueType || type.IsGenericType)
return type;

var nullableType = typeof(Nullable<>).MakeGenericType(type);

return nullableType;
}

如果源类型不是,它会将您的类型转换为可空类型,否则保持原样。

if (allowNulls)
{
type = GetNullableTypeFrom(type);
}

关于c# - 将 `Type` 转换为 `Nullable<Type>`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31258226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com