gpt4 book ai didi

c# - 将字符串转换为字符串的泛型类型

转载 作者:太空狗 更新时间:2023-10-29 20:45:02 26 4
gpt4 key购买 nike

我正在编写一种方法来进行智能类型转换 - 如果类型参数恰好是字符串,则使用 ToString(),否则进行转换,但如果转换不起作用则返回 null。基本上从 v 中获取尽可能多的信息而不抛出异常。

在尝试强制转换之前,我检查了 T 确实是一个 string,但编译器仍然不支持:

Cannot convert type 'string' to 'T'

这是我的方法:

public T? Convert<T>(object v)
{
if (typeof(T) == typeof(string)) {
return (T)v.ToString(); // Cannot convert type 'string' to 'T'
} else try {
return (T)v;
} catch (InvalidCastException) {
return null;
}
}

如果这是某种不可饶恕的罪过,请告诉我。我用它来处理一些可能具有混合类型的数据结构。

最佳答案

在转换为通用类型时,您基本上需要通过 object:

return (T)(object) v.ToString()

return (T)(object) v;

不过,我会使用 is 而不是捕获 InvalidCastException

参见 Eric Lippert's recent blog post详细了解为什么这是必要的。

特别是:

Because the compiler knows that the only way this conversion could possibly succeed is if U is bool, but U can be anything! The compiler assumes that most of the time U is not going to be constructed with bool, and therefore this code is almost certainly an error, and the compiler is bringing that fact to your attention.

(用 T 代替 U,用 string 代替 bool...)

关于c# - 将字符串转换为字符串的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11866229/

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