Если я запускаю код:
object myObject = "abc";
JToken jToken = (JToken)myObject;
, он компилируется нормально, но выдает crypti c исключение заголовок. Это crypti c, так как можно привести форму String к JToken, что невозможно из-за следующей компиляции и правильной работы:
String mystring = "abc";
JToken jToken2 = (JToken)mystring;
Так что мне очень любопытно, почему это происходит?
Конечно, приведенный выше пример немного глуповат, но, возможно, чтобы понять, почему я спрашиваю это, потому что такая же ошибка также возникает в следующей ситуации.
class Program
public static JToken apply_function(Delegate function, object[] arglist)
{
return (JToken)function.DynamicInvoke(arglist);
}
static void Main(string[] args)
{
Func<string> hello = () => { return "hello world!"; };
Console.WriteLine(apply_function(hello, new object[0]));
}
}
Где в реальной ситуации где я хочу использовать apply_function
, это ситуация, когда у меня нет контроля над типом возвращаемого значения или типами аргументов делегата, переданных в apply_function
. Единственная гарантия, которую я имею, - это то, что делегат будет функцией, которая возвращает что-то, что можно преобразовать в JToken.