这是我第一次自己使用StackOverflow.我之前在这里找到了许多问题的答案,所以我想我会尝试自己问一些问题.
我正在做一个小项目,我现在有点卡住了.我知道如何解决我的问题 - 而不是我希望它解决的方式.
该项目包括一个NBT解析器,我决定自己写,因为它将用于或多或少的自定义NBT文件变体,虽然核心原则是相同的:二进制数据流与特定种类的预定义"关键字"标签.我决定尝试为所有不同类型的标签创建一个类,因为标签的结构非常相似 - 它们都包含类型和有效负载.这就是我被困的地方.我希望有效负载具有特定类型,当隐式执行显式转换时,会抛出错误.
我能想到的最好的方法是制作Object或动态类型的有效负载,但这样可以隐式地完成所有转换:
Int64 L = 90000;
Int16 S = 90;
dynamic Payload; // Whatever is assigned to this next will be accepted
Payload = L; // This fine
Payload = S; // Still fine, a short can be implicitly converted to a long
Payload = "test"; // I want it to throw an exception here because the value assigned to Payload cannot be implicitly cast to Int64 (explicit casting is ok)
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我想通过某种方式告诉C#从现在开始解决它,即使Payload是动态的,如果指定的值不能隐式转换为当前值的类型,它将抛出异常 - 当然,除非它完成明确. …