gpt4 book ai didi

c# - 具有动态参数的整数类型预期开关的值

转载 作者:太空狗 更新时间:2023-10-29 17:41:57 31 4
gpt4 key购买 nike

只是出于好奇。

如果我有以下代码

public static string Format(dynamic exception)
{
switch (exception.GetType().ToString())
{
case "test":
return "Test2";
}
return null;
}

我得到错误“开关表达式或 case 标签必须是 bool、char、string、integral、enum 或相应的可为 null 的类型”

但是如果我有下面的代码

public static string Format(dynamic exception)
{
string test = exception.GetType().ToString();
switch (test)
{
case "test":
return "Test2";
}
return null;
}

一切编译正常。如果开关正在检查 Type string 和 ToString() 的变量,有什么区别?还是因为在调用 ToString() 之前有机会抛出异常?

最佳答案

我认为问题在于您的 exception变量是 dynamic目的。由于它是动态的,因此它的类型在编译时不会解析,调用它的任何方法的类型也不会解析。

因此,第一种情况下的 switch 语句不知道 .GetType() 是什么类型方法将返回,或者 .ToString()方法。如果你想让它工作,你可以像这样转换它:

switch (exception.GetType().ToString() as string)

在您的第二个代码块中,您明确声明 exception.GetType().ToString() 的结果将是一个字符串。在这种情况下,编译器知道传递给 switch 语句的变量的类型。

就异常而言:编译器不关心您的方法调用是否可能抛出异常。如果是这样,异常将从 switch 语句中冒出并从您的方法调用中抛出。

查看您的 Format 的内容函数,如果传入 exception 就可以实现相同的功能作为object .如果您使用此函数来格式化 Exceptions具体来说,你最好使用 Exception作为你的 exception 的类型参数。

关于c# - 具有动态参数的整数类型预期开关的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21780081/

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