Tho*_*kow 11 c# generics nameof
假设我有类型
public class A<T> { }
Run Code Online (Sandbox Code Playgroud)
在代码中的某个地方,我想抛出与该类型的错误使用相关的异常:
throw new InvalidOperationException("Cannot use A<T> like that.");
Run Code Online (Sandbox Code Playgroud)
到目前为止,这么好,但我不想硬编码类名,所以我想我也许可以使用
throw new InvalidOperationException($"Cannot use {nameof(A<T>)} like that.");
Run Code Online (Sandbox Code Playgroud)
相反,但在这种情况下,我不知道确切的类型T.所以我想也许我可以用C++中的模板特化来做到这一点:
throw new InvalidOperationException($"Cannot use {nameof(A)} like that.");
Run Code Online (Sandbox Code Playgroud)
要么
throw new InvalidOperationException($"Cannot use {nameof(A<>)} like that.");
Run Code Online (Sandbox Code Playgroud)
但那些产量
类型参数数量不正确.
和
缺少类型参数.
我绝对不想硬编码类名,因为它可能会在以后更改.我怎样才能得到班级的名字,最好是通过nameof?
最理想的是,我想要实现的是"Cannot use A<T> like that."或"Cannot use A like that.".
Pac*_*eco 26
你有没有尝试过:
typeof(T).FullName;
Run Code Online (Sandbox Code Playgroud)
或者
t.GetType().FullName;
Run Code Online (Sandbox Code Playgroud)
希望对你有效。
Rot*_*tem 11
如果您不关心显示T,您可以使用eg nameof(A<object>),假设object符合泛型类型约束.
这导致"不能使用A那样的".
如果您想要完全打印A<T>,可以使用:
$"{nameof(A<T>)}<{nameof(T)}>"
Run Code Online (Sandbox Code Playgroud)
但是只有在课堂上才有,T而其他地方则不存在.
根据要引发该异常的位置,可以使用该类型。
在实例上,调用this.GetType(),然后获取Nameor FullName属性:
throw new InvalidOperationException($"Cannot use {this.GetType().Name} like that.");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4686 次 |
| 最近记录: |