1

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 ().

4

4 回答 4

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");

}
于 2012-07-21T01:09:06.713 回答
3

我认为比你的双重演员更优雅的解决方案是使用as关键字。像这样:

return o.ToString() as T;

我没有尝试过,但编译器不应该有这个问题,因为当它不能将字符串转换为 T 时它会返回 null,在你的条件下它当然不会这样做。

于 2012-07-21T02:37:02.333 回答
0

没有从 String 到其他所有类型的转换。编译器告诉您它不知道如何执行您所要求的操作。如果您提供有关您正在尝试做的事情的更多详细信息,也许有人可以提供一些建议。

于 2012-07-21T01:04:42.953 回答
0

转换和解析之间存在差异。我认为您想要的是尝试解析字符串

int stringToNum = (int)"123";  //will not compile

int stringToNum2 = int.Parse("123");
于 2012-07-21T01:34:45.217 回答