C#不允许我将类型T
转换为我可以证明T
的类型。如何将T
投射到该类型?
public static T _cast<T> (object o) {
if (typeof(T) == typeof(string)) {
return (T) o.ToString(); // Compiler YELLS!
}
throw new InvalidCastException("missing compiler generated case");
}
我正在编写一个程序,用于生成从C ++到C#的代码。我希望使用此_cast
操作代替C ++的operator T ()
。
答案 0 :(得分:3)
通常我不回答我自己的问题,但我刚刚提出了解决方案:转发到object
,然后转向T
public static T _cast<T> (object o) {
if (typeof(T) == typeof(string)) {
return (T)(object) o.ToString();
}
throw new InvalidCastException("missing compiler generated case");
}
答案 1 :(得分:3)
我认为比双重演员更优雅的解决方案是使用as
关键字。像这样:
return o.ToString() as T;
我没有尝试过,但是编译器应该没有问题,因为当它无法将字符串强制转换为T时它将返回null,这在你的条件中它当然不会。< / p>
答案 2 :(得分:0)
没有从String转换为其他所有类型。编译器告诉你它不知道如何做你所问的。如果您提供有关您尝试做的更多细节,也许有人可以提供一些建议。
答案 3 :(得分:0)
强制转换和解析之间存在差异。我想你想要的是尝试解析字符串
int stringToNum = (int)"123"; //will not compile
int stringToNum2 = int.Parse("123");